1.引用计数器retainCount:每个对象都有这个属性,默认值为1,记录当前对象有多少人用。
为对象发送一条retain/release消息,对象的引用计数器加/减1,为对象发一条retainCount,得到对象的引用计数器值,当计数器为0时自动调用对象的dealloc方法。
手动发送消息:-(id)performSelector:(SEL)@Selector
Person *p = [Person new];
SEL s = @selector(func);
[p performSelector:s1]; 等于 [p func];
2.MRC:手动引用计数/手动内存管理:手动发送retain和release。
ARC:自动引用计数/手动内存管理: 自动 发送retain和release。
3.野指针:OC中的野指针:指针指向的对象已经被回收了。避免野指针:设置nil。
4.回收内存空间的本质:代表变量所占的空间可以分配给其他人了。
5.僵尸对象:1个已经被释放的对象,但是这个对象所占的空间还没被分配。
6.内存泄漏:对象没有被及时回收,一直在内存中,直到程序结束。
7.MRC模式下,对象时OC对象,setter和dealoc应该写内存管理机制。
8.@property:自动生成私有属性,属性的getter和setter方法的声明和实现。
@property(参数1,参数2)数据类型 名称;
参数: 多线程相关的:atomic:默认值,setter方法有线程安全锁,效率低;nonatomic:反之。
setter方法相关的:assign:默认值,setter方法直接赋值;retain:生成符合MRC内存管理的setter方法:先判断对象是否是同一个,如果不是,release旧的,retain新的。
只读只写:readwrite:默认值,同时有getter和setter;readonly:只有getter。、
生成getter和setter方法名称相关的:可以修改setter和getter方法名称。
9.@class:A包含B、B包含A的循环嵌套问题,用@class标注这是一个类。