手动引用计数MRC小结
手动内存管理:
1,管理范围: 任何继承了 NSObject的对象
2,堆里边存放动态产生的东西(对象),栈存放(局部变量,会自动回收)(比如c的int,char......类型和指针变量,结构体。。。。。)
3,每一个oc 对象都有自己的引用计数器(4个字节,即每个对象都会用四个字节的存储空间来存放自己的引用计数器),是一个整数,表示“对象被引用的次数”。
4,alloc,new,copy创建新对象时,新对象的引用计数器默认是一,当给对象发送一条 retain(返回的是对象本身)消息时,可以使引用计数器值+1,当发送一条release消息时引用计数器值-1,可以给对象发送retaincount消息获得当前的引用计数器值。
5,当一个引用计数器值为0时,它将被销毁,其占用内存被系统释放,在销毁时系统会自动给对象发送一条dealloc(在这里释放相关资源)消息,一般会重写dealloc方法,一旦重写就必须调用[super dealloc],并且放在最后调用。
6,一旦对象被回收了,它占用的内存不可再用,坚持使用会导致程序崩溃(野指针错误,不可用,野指针指向不可用内存)(不要超额的使用realease,除非在之前写一条类似于(p被空指针)p=nil的代码,才能避免报错,因为oc不存在空指针,所以不报错,nil是将指针清空)。
7,在被释放后,即执行最后一条release消息后,不能再调用方法,即使是retain消息也无法起死回生,所以写了retain运行也会报错。
8, 多个对象之间的内存管理:经典范例person&book之间的内存管理,应该遵循谁调用,谁释放的原则。不能出现内存泄露现象。
浙公网安备 33010602011771号