在我的@interface
theres a NSArray *Monate
后跟:
@property (nonatomic, retain) NSArray* Monate;
如果我这样做:
filePath = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"plist"];
self.Monate = [NSArray arrayWithContentsOfFile:filePath];
在构造函数中,它被设置为一个自动释放的对象(这是正确的吗?)。
那么我之后应该[Monate retain]
吗?
答案 0 :(得分:4)
这段代码是正确的;你不应该添加一个保留电话。
+[NSArray arrayWithContentsOfFile:]
将返回自动释放的NSArray
。将其传递给-[YourClass setMonate:]
将保留对象并分配给支持ivar。构造函数返回后,新的NSArray
将保留计数为2,并将其添加到当前自动释放池中(导致净保留计数为1)
只要在dealloc中释放数组,此代码就是正确的。
答案 1 :(得分:2)
之后你不应该保留。通过设置保留的@property,当您使用self.Monate setter
时会发生一些特殊情况1)Monate实例变量中的任何内容(如果有)都将获得释放 2)新的任务将获得保留。
如果你使用了@property of assign,那么你必须保留,但是你的方式很好。
作为旁注,在objective-c中,大写单词通常保留给类名。我建议将它改为“monate”而不是“Monate”,因为这可能导致路上的混乱
答案 2 :(得分:0)
[NSArray arrayWithContentsOfFile:];返回一个自动释放的数组,如果你希望它比方法结束的时间更长,它将需要保留。
请注意您的财产声明如何指定“保留”。这意味着任何self.property = x;你做的电话将保留你传递的对象。
所以你在做什么是正确的。只记得做self.property = nil;在你的dealloc方法中。
将属性设置为nil将释放旧对象并将指针设置为nil,这是正确的方法。