-4

1.

NSMutableArray *content =[NSMutableArray new];

2.

NSMutableArray *content = [[NSMutableArray alloc] init];

在此,(1) 和 (2) 的保留值是什么。

4

7 回答 7

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
于 2013-06-17T07:19:38.947 回答
1

这两个表达式的结果是相同的。 +new只是调用allocand的简写init。从字面上看,new实现为:

 + new { return [[self alloc] init]; }

因此,两者都返回一个保留计数为+1的对象。不是1,而是+1。也就是说,它们返回一个对象,release当您的代码完成该对象时,您的代码必须调用该对象。

绝对保留计数是没有意义的。在内部,对象NSMutableArray可能retain74 次,只要它根据需要释放它 74 次,那将是有效的。当然,NSMutableArray并不会真正玩这种恶作剧,但有些类会玩(尤其是使用网络和/或 UI 玩游戏的更复杂的类)。

于 2013-06-17T07:52:56.067 回答
1

Alloc : NSObject 的类方法。返回接收类的新实例。

Init : NSObject 的实例方法。由子类实现以在分配内存后立即初始化新对象(接收器)。

新:NSObject 的类方法。分配接收类的新实例,向其发送初始化消息,并返回初始化对象。

两者的保留计数均为 1

于 2013-06-17T07:17:42.467 回答
0

对于 (1) 和 (2),保留计数为 1,除非您使用 ARC,否则请确保在某处释放它。

于 2013-06-17T07:14:00.047 回答
0

在两个 Array Retain 计数中均为 1

在以下情况下,对象的 retainCount 会发生变化:

1) 当你创建一个对象(new 或 alloc、copy 或 mutablecopy)时,它的保留计数为 1。

2) 当你向一个对象发送一个保留消息时,它的保留计数加 1。

3) 当你向一个对象发送一个释放消息时,它的保留计数减 1。

当您向对象发送自动释放消息时,其保留计数将减 1(不像释放的情况那样立即减少,而是在将来的某个时间)

于 2013-06-17T07:14:20.153 回答
0

他们都是1。但是你不应该担心这一点。记住:

如果您分配一个对象,您有责任释放它(我假设您正在使用 MRR)。

于 2013-06-17T07:12:42.380 回答
0

+new 方法只是 +alloc 和 -init 的简写。所有权语义是相同的。使用 +new 的唯一好处是它更简洁。如果您需要为类的初始化程序提供参数,则必须使用 +alloc 和 -initWith... 方法。因此,两者的保留计数均为 1。

于 2013-06-17T07:16:22.650 回答