面试题答案
一键面试- 对象创建:
- 当使用
alloc
、new
、copy
、mutableCopy
等方法创建一个对象时,该对象的引用计数初始值为1。例如:MyObject *obj = [[MyObject alloc] init];
,此时obj
指向的对象引用计数为1。
- 当使用
- 引用计数增加:
- 当把对象赋值给一个强引用(
strong
)变量时,该对象的引用计数会增加1。比如:MyObject *strongRef = obj;
,此时obj
指向的对象引用计数变为2(因为obj
和strongRef
都是强引用)。 - 如果对象作为函数参数传递给一个接受强引用参数的函数,在函数内部,对象的引用计数也会增加。
- 当把对象赋值给一个强引用(
- 引用计数减少:
- 当一个强引用变量超出其作用域或者被赋值为
nil
时,对应的对象引用计数减1。例如在函数内定义的强引用变量,函数结束时该变量作用域结束,对象引用计数减1。如果strongRef = nil;
,那么原来strongRef
指向的对象引用计数减1。 - 当对象从一个集合(如
NSArray
、NSDictionary
等)中移除时,该对象的引用计数也会减1。
- 当一个强引用变量超出其作用域或者被赋值为
- 对象销毁与内存释放:
- 当对象的引用计数变为0时,ARC会自动调用对象的
dealloc
方法。在dealloc
方法中,会释放对象所占用的资源(如释放成员变量所占用的内存等)。 - 一旦
dealloc
方法执行完毕,对象所占的内存就会被系统回收,从内存中移除。
- 当对象的引用计数变为0时,ARC会自动调用对象的