1.
NSMutableArray *content =[NSMutableArray new];
2.
NSMutableArray *content = [[NSMutableArray alloc] init];
在此,(1) 和 (2) 的保留值是什么。
1.
NSMutableArray *content =[NSMutableArray new];
2.
NSMutableArray *content = [[NSMutableArray alloc] init];
在此,(1) 和 (2) 的保留值是什么。
不要使用retainCount
[1]
你永远不应该使用 -retainCount,因为它永远不会告诉你任何有用的东西。Foundation 和 AppKit/UIKit 框架的实现是不透明的;你不知道要保留什么,为什么要保留,谁在保留,什么时候保留等等。- Dave DeLong
NSMutableArray *content =[NSMutableArray new]; //new will increase retainCount of content by 1
NSMutableArray *content = [[NSMutableArray alloc] init];//alloc will increase retainCount of content by 1
这两个表达式的结果是相同的。 +new
只是调用alloc
and的简写init
。从字面上看,new
实现为:
+ new { return [[self alloc] init]; }
因此,两者都返回一个保留计数为+1的对象。不是1,而是+1。也就是说,它们返回一个对象,release
当您的代码完成该对象时,您的代码必须调用该对象。
绝对保留计数是没有意义的。在内部,对象NSMutableArray
可能retain
74 次,只要它根据需要释放它 74 次,那将是有效的。当然,NSMutableArray
并不会真正玩这种恶作剧,但有些类会玩(尤其是使用网络和/或 UI 玩游戏的更复杂的类)。
Alloc : NSObject 的类方法。返回接收类的新实例。
Init : NSObject 的实例方法。由子类实现以在分配内存后立即初始化新对象(接收器)。
新:NSObject 的类方法。分配接收类的新实例,向其发送初始化消息,并返回初始化对象。
两者的保留计数均为 1
对于 (1) 和 (2),保留计数为 1,除非您使用 ARC,否则请确保在某处释放它。
在两个 Array Retain 计数中均为 1
在以下情况下,对象的 retainCount 会发生变化:
1) 当你创建一个对象(new 或 alloc、copy 或 mutablecopy)时,它的保留计数为 1。
2) 当你向一个对象发送一个保留消息时,它的保留计数加 1。
3) 当你向一个对象发送一个释放消息时,它的保留计数减 1。
当您向对象发送自动释放消息时,其保留计数将减 1(不像释放的情况那样立即减少,而是在将来的某个时间)
他们都是1。但是你不应该担心这一点。记住:
如果您分配一个对象,您有责任释放它(我假设您正在使用 MRR)。
+new 方法只是 +alloc 和 -init 的简写。所有权语义是相同的。使用 +new 的唯一好处是它更简洁。如果您需要为类的初始化程序提供参数,则必须使用 +alloc 和 -initWith... 方法。因此,两者的保留计数均为 1。