【发布时间】:2015-09-25 19:33:20
【问题描述】:
对于这个问题:
Test *t1 = [[Test alloc]init];
Test *t2 = [Test new];
Test *t3 = [t1 copy];
NSLog(@"Retain count of Object 1 : %ld",[t1 retainCount]);
NSLog(@"Retain count of Object 2 : %ld",[t2 retainCount]);
NSLog(@"Retain count of Object 3 : %ld",[t3 retainCount]);
NSArray *arr = @[t1,t2,t3];
NSLog(@"Retain count of Object 1 : %ld",[t1 retainCount]);
NSLog(@"Retain count of Object 2 : %ld",[t2 retainCount]);
NSLog(@"Retain count of Object 3 : %ld",[t3 retainCount]);
答案是:
对象 1 的保留计数:1
对象 2 的保留计数:1
对象 3 的保留计数:1
对象 1 的保留计数:3
对象 2 的保留计数:2
对象 3 的保留计数:3
我可以理解,将对象添加到数组中会将其引用计数增加 1,但对于对象 1 和 3,它会增加 2? 有人可以回答吗?
【问题讨论】:
-
参考this
-
引用
retainCount绝对是个坏主意,因为幕后可能会发生很多事情。 Apple 鼓励您从对象图的角度思考,而不是保留计数。 -
是的,我是一名培训师,我需要解释为什么会这样!!
-
不可能知道
copy做了什么,因为它调用了您的对象的copyWithZone:方法,而您没有显示该方法(没有它,调用会引发异常)。
标签: objective-c arrays memory-management retain retaincount