A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

僵尸对象:所占用内存已经被回收的对象,僵尸对象不能再使用
野指针:指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)
空指针:没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错


XCODE6.1修改检测僵尸对象的路径:

xcode>product>scheme>edit scheme>Diagnostics


retain :计数器+1,会返回对象本身

release :计数器-1,没有返回值

retainCount :获取当前的计数器

dealloc:当一个对象要被回收的时候,就会调用dealloc方法

    一定要调用[super dealloc],这句调用要放在最后面



set方法内存管理相关的参数
retain :release旧值,retain新值(适用于OC对象类型)
assign : 直接赋值(默认,适用于非OC对象类型)
copy   : release旧值,copy新值

是否要生成set方法

readwrite : 同时生成setter和getter的声明、实现(默认)

readonly : 只会生成getter的声明、实现


多线程管理

nonatomic : 性能高 (一般情况都使用此选项)

atomic   : 性能低(默认)


setter和getter方法的名称

setter : 决定了set方法的名称,一定要有个冒号 :

getter : 决定了get方法的名称(一般用在BOOL类型)


// 返回BOOL类型的方法名一般以is开头

@property (getter = isExist) BOOL exist;  // 是否存在



@class

作用:仅仅告诉编译器,某个名称是一个类

@class Person; // 仅仅告诉编译器,Person是一个类



开发中引用一个类的规范

1:在.h文件中用@class来声明需要引用的类

2:在.m文件中用#import来包含类的所有东西


两端循环引用解决方案

1:一端用retain

2:一端用assign



ARC
判断准则:只要没有强指针指向对象,就会释放对象
特点:

1:不允许调用release、retain、retainCount

2:允许重写dealloc,但是不允许调用[super dealloc]

3:@property的参数:

  * strong :成员变量是强指针(适用于OC对象类型)

  * weak :成员变量是弱指针(适用于OC对象类型)

  * assign : 适用于非OC对象类型


强指针:默认情况下,所有的指针都是强指针 __strong

弱指针:__weak


// 错误写法(没有意义的写法)

__weak Person *p = [[Person alloc] init];

因为弱指针p指向一个Person对象,该

Person对象一创建就会被释放
当两端循环引用的时候,解决方案:

ARC下:

1端用strong,另1端用weak


非ARC下:

1端用retain,另1端用assign

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马