类对象、类的加载过程、SEL、内存管理、循环引用、autorelease
类也是对象,称为类对象
类对象 == 类
类的加载过程:
(1)当程序启动的时候,就会加载一次所有的类,类加载完毕后就会调用+ load方法
(2)当第一次使用这个类的时候,就会调用一次 + initialize 方法
- description 方法:利用%@ 输出对象就会调用此方法
NSLog 输出C语言字符串的时候,不能有中文
SEL : 方法的地址
SEL对象的创建:
(1)SEL s = @selector(test);
(2)SEL s2 = NSSelectorFromString(@"test");
_cmd 代表当前方法
内存管理
每个对象都有引用计数器(4个字节),表示对象被引用的次数
retain 引用计数器+1
release 引用计数器-1
retainCount 获得当前引用计数器值
野指针 : 指向僵尸对象(不可用内存)的指针
EXC_BAD_ACCESS : 访问了一块坏的内存,野指针错误
OC不存在空指针错误,给空指针发送消息不报错
dealloc 回收时调用
最后一定调用[super dealloc];
@property (retain) 对象类;
1、set方法内存管理相关参数
retain:release 旧值 retain 新值
assign:直接赋值(默认)
copy:release 旧值 copy 新值
2、是否要生成set方法
readwrite:同时生成setter 和 getter
readonly:只生成getter
3、多线程管理
nonatomic:性能高(一般用这个)
atomic:性能低(默认)
@class 类名 :循环引用
.h文件用@class
.m文件用@import
两端循环引用解决方案
(非ARC):一端用retain,一端用assign
(ARC):一端用strong,一端用weak
@autoreleasepool{}// 创建释放池
autorelease 方法返回对象本身
autorelease 会将对象放到一个自动释放的池中
当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
池子以栈结构存在(先进后出)