僵尸对象:所占用内存已经被回收的对象,僵尸对象不能再使用
野指针:指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(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 |
|