标签:
1,什么是引用计数
所有OC对象都有一个计数器,叫做引用计数,引用计数就是目前有几个对象在使用该对象(持有该对象的引用);
2,什么是对象所有权
A对象拥有B对象的引用,A对象拥有B对象的所有权;
3,什么情况下需要retain
A对象的拥有者又增加了一个,那么A对象的拥有计数加1,此时需要使用retain(就是当其他对象需要该对象时,即其他的指针指向了该对象,那么就使该对象的引用计数加1此时需要向该对象发retain消息)
4,什么情况下需要release
A对象的拥有者又减少了一个,那么A对象的拥有计数减1,此时需要使用release(就是当该对象的拥有者不再需要该对象时,那么就可向该对象发送 release消息,使该对象的引用计数减1)
5,野指针会有什么问题,如何避免野指针和僵尸对象
野指针就是指 指向一个所占内存已经被销毁的对象的指针;野指针会使程序崩溃,而且不容易检测;
僵尸对象则是指一个所占用的内存已经被销毁的对象; -- 释放掉一个内存后,如果这个指针还需要,要么赋新值,要么给个nil;
6,自动释放池是什么
自动释放池是OC的一种内存自动管理机制,当自动释放池销毁时,会将池中的对象逐个调用release方法;
使用autorelease方法将对象放入包含它的自动释放池中;自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象(例如如果一个对象的引用计数器>1则此时就无法销毁,只是使该对象的引用计数-1)
7,什么是强指针,什么是弱指针
强指针,拥有对象所有权,引用计数+1
弱指针,可以引用对象,不会拥有对象所有权, 引用计数不变
8,assign,strong,weak有什么区别
strong:(ARC环境下对象属性的默认值)强指针,拥有对象所有权,相当于retain,引用计数+1。只要用了ARC机制,OC对象类型都推荐使用strong,不使用retain
weak:(ARC下)弱指针,可以引用对象,相当于assign赋值,不会拥有对象所有权, 引用计数不变。weak适用于OC对象 ① 弱指针会在其指向的实例对象被释放后?自动变成nil ② 即当弱指针指向的实例对象被释放了,弱指针也不会变成野指针
assign:适用于非指针类型 (适用于基本数据类型)
9,如何解决两个对象之间的循环引用
使用弱引用;将两个对象中的一个设为弱引用
标签:
原文地址:http://www.cnblogs.com/snowcoming/p/5379824.html