考虑这行代码,data是一个方法参数:
myVar = [[NSMutableData data] retain];
我不完全确定这里发生了什么,但我认为它将myVar分配给数据中包含的数据,增加了它的引用计数。有人可以确认或否认吗?谢谢!
原始代码段的来源 - 请参阅清单1:Apple Dev Article
答案 0 :(得分:2)
您正在使用便捷方法使用新的NSMutableData实例初始化myVar变量,然后保留它。
它与myVar = [[NSMutableData alloc] init];
基本相同,因为无论如何都要保留它。
答案 1 :(得分:2)
[NSMutableData data]将返回一个自动释放的对象(便捷方法)。
因此,当当前运行循环的自动释放池耗尽时,它将自动释放。
你保留它以防止这种情况......
然后你确定你有一个指向该对象的有效指针。 这是正确的,只是不要忘记在你不再需要它时释放它......
修改强>
例如:
[ [ [ [ [ [ NSData data ] retain ] release ] autorelease ] retain ];
保留计数为2,因为自动释放对象不会更改保留计数... 但是该对象已在当前的自动释放池中放置了两次,因此它将在下一次排放时释放两次......
答案 2 :(得分:1)
在上面,“data”是一个返回类NSMutableData的新对象的类方法。由于“数据”不是暗示其返回的对象的所有权的方法之一,因此调用对象的“保留”方法来建立所有权。调用者现在负责在完成对象时放弃其所有权声明。