快速Objective-C问题

时间:2011-03-22 01:01:21

标签: objective-c

考虑这行代码,data是一个方法参数:

myVar = [[NSMutableData data] retain];

我不完全确定这里发生了什么,但我认为它将myVar分配给数据中包含的数据,增加了它的引用计数。有人可以确认或否认吗?谢谢!

原始代码段的来源 - 请参阅清单1:Apple Dev Article

3 个答案:

答案 0 :(得分:2)

您正在使用便捷方法使用新的NSMutableData实例初始化myVar变量,然后保留它。

它与myVar = [[NSMutableData alloc] init];基本相同,因为无论如何都要保留它。

答案 1 :(得分:2)

[NSMutableData data]将返回一个自动释放的对象(便捷方法)。

因此,当当前运行循环的自动释放池耗尽时,它将自动释放。

你保留它以防止这种情况......

然后你确定你有一个指向该对象的有效指针。 这是正确的,只是不要忘记在你不再需要它时释放它......

修改

例如:

[ [ [ [ [ [ NSData data ] retain ] release ] autorelease ] retain ];

保留计数为2,因为自动释放对象不会更改保留计数... 但是该对象已在当前的自动释放池中放置了两次,因此它将在下一次排放时释放两次......

答案 2 :(得分:1)

在上面,“data”是一个返回类NSMutableData的新对象的类方法。由于“数据”不是暗示其返回的对象的所有权的方法之一,因此调用对象的“保留”方法来建立所有权。调用者现在负责在完成对象时放弃其所有权声明。