创建的对象保留计数

时间:2013-06-17 07:09:52

标签: iphone ios objective-c

1

NSMutableArray *content =[NSMutableArray new];

2

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

这就是(1)和(2)的保留cout。

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

Init:NSObject的实例方法。由子类实现,在分配了内存之后立即初始化一个新对象(接收者)。

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

两者的保留计数均为1

答案 2 :(得分:1)

两个表达式的结果相同。 +new只是调用allocinit的捷径。从字面上看,new实现为:

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

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

绝对保留计数毫无意义。在内部,NSMutableArray可能retain对象74次,只要它根据需要释放它74次,这将是有效的。当然,NSMutableArray并没有真正发挥这样的恶作剧,但有些课程(尤其是通过网络和/或用户界面玩游戏的更复杂的课程)。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

两个阵列保留计数均为1

在下列情况下,

对象的retainCount会发生变化:

1)创建对象(new或alloc,copy或mutablecopy)时,它的保留计数为1.

2)当您向对象发送保留消息时,其保留计数为 增加1。

3)当您向对象发送释放消息时,其保留计数为 递减1。

当您向对象发送自动释放消息时,其保留计数将减1(不是 立即发布但未来一段时间)

答案 6 :(得分:0)

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