保留Copy属性中的Count

时间:2010-08-13 05:54:56

标签: objective-c

请阅读以下代码::

AddressCard *card1 = [[AddressCard alloc] init]; 
AddressCard *card2 = [[AddressCard alloc] init];

[card1 setName:[NSMutableString stringWithString:@"Deepak"] andEmail:[NSMutableString stringWithString:@"deepak@paymate"]];

NSMutableString * temp = [NSMutableString stringWithString:@"Deepak"];
r1 = [temp retainCount];
r2 = [card1.name retainCount];

//[card2 setName:card1.name];//retain count 2
//OR//
[card2 setName:temp];// retain count 1

r1 = [card2.name retainCount];

这有点令人困惑,因为在这两种情况下输入类型都是字符串。

提前致谢。 d

2 个答案:

答案 0 :(得分:0)

作为程序员,您不必担心保留计数的确切值(主要是)。您需要跟踪其他人拥有的对象。

在您的代码中,您将获得保留计数r1& R2 ....

没有什么拥有temp,它是用类方法(+方法)创建的,所以它会在下一次自动释放池刷新时释放。

card1拥有其“名称”

当card2拥有temp时设置[card2 setName:temp];。它不再受到在下一个游泳池发布时被摧毁的威胁。

答案 1 :(得分:0)

我认为你似乎忽略了可变和不可变对象的重点。当你调用setName:andEmail:时,为什么这个方法需要可变字符串有任何逻辑上的原因?例如,此方法是否通过插入或删除字符来更改这些字符串的值?如果您打算更改字符串的内容,它们只需要是可变的。如果您只是将字符串分配给另一个变量而不修改字符串的实际内容,那么它们应该是不可变的NSStrings。

此外,如果您对何时保留以及何时释放对象感到困惑,请确保您已阅读并理解Cocoa Memory Management Programming Guide。这可能会回答您有关哪些方法/属性将保留对象以及何时应释放对象的任何问题。

相关问题