2011-03-22 81 views
1

考虑这行代码,数据是一个方法的参数:快速Objective-C的问题

myVar = [[NSMutableData data] retain]; 

我不能完全肯定这是怎么回事,但我认为这是分配myVar的中包含的数据数据,增加它的引用计数。有人可以证实或否认这一点?谢谢!的原代码

来源snippet-见清单1:Apple Dev Article

回答

2

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

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

你保留它来防止这种...

那你确定你有一个有效的指向对象。 这是正确的,只是不要忘了释放它,当你不需要它了......

编辑

例如:

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

保留计数为2时,自动释放一个对象不会改变保留计数... 但是该对象在当前的自动释放池中放置了两次,所以它将在下一次放出时释放两次...

+0

谢谢,剩下的一个问题:NSMutableData之后的单词数据的意义是什么? – 2011-03-22 01:11:16

+0

这是类方法的名称:+(NSData)数据。在其他语言中也称为静态方法。 – Macmade 2011-03-22 01:13:39

+0

@Macmade:实际上,Objective-C *中的类方法并不类似于静态方法。 – jlehr 2011-03-22 03:08:12

2

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

它与myVar = [[NSMutableData alloc] init];基本相同,因为您仍然保留它。

+0

小心的,变量的初始化和变量赋值在C中是两个不同的东西(在扩展中,在Objective-C中)。 – dreamlax 2011-03-22 01:05:15

+0

不够公平,所以说这个的正确方法是上面的代码将一个新的NSMutableData实例分配给myVar? – Rog 2011-03-22 01:10:12

+0

是的,这是更多的“通过书”的方式来说。我不认为这可能会让任何人感到困惑,但我只是一个有点儿童的人。 – dreamlax 2011-03-22 23:57:38

1

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