在复制财产保留计数

问题描述:

请仔细阅读下面的代码::在复制财产保留计数

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

[card1 setName:[NSMutableString stringWithString:@"Deepak"] andEmail:[NSMutableString stringWithString:@"[email protected]"]]; 

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

+0

这是严重难以阅读。你应该选择所有的代码,并点击代码示例按钮,以便它至少得到正确的格式。 – 2010-08-13 05:57:58

+2

你的问题是什么? – 2010-08-13 06:07:32

作为程序员,您不需要担心保留计数(大部分)的确切值。您需要跟踪哪些对象属于他人。

在你的代码,你在哪里得到的保留数R1 R2 & ....

没什么拥有温度,它与一个类的方法(+方法)创建的,因此将在明年自动释放池冲洗得到释放。

卡1拥有自己的“名字”

当你设置[card2 setName:temp];这就是当卡2拥有温度。它不再受到在下次游泳池释放时遭到破坏的威胁。

我想你似乎缺少可变和不可变对象。当你调用setName:andEmail:有什么合理的原因,为什么这个方法期望可变字符串?例如,该方法是否通过插入或删除字符来更改这些字符串的值?如果您打算更改字符串的内容,它们只需要是可变的。如果您只将字符串分配给另一个变量而不修改字符串的实际内容,那么它们应该是不可变的NSStrings。

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