在setter中释放副本的位置?

fuz*_*oat 2 cocoa objective-c

在我的setter中,我有一个我正在复制的传入字符串,以避免在修改原始文件时出现任何问题.

- (void)setName:(NSString *)newName{
    if(name != newName) {
        [name release];
        name = [newName copy];
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:因为我正在复制我应该在哪里发布它,或者我只是做自动释放?即

- (void)setName:(NSString *)newName{
    if(name != newName) {
        [name release];
        name = [[newName copy] autorelease];
    }
}
Run Code Online (Sandbox Code Playgroud)

加里

Ale*_*lex 6

执行此操作时copy,将保留该对象.这就是你想要的.如果你自动发布它,它最终将被解除分配.所以你的第一个例子是正确的.第二个会崩溃您的应用程序.

如果您担心在释放对象时会发生什么,请记住您应该releasedealloc方法中引用任何引用.

  • 您可能还需要考虑使用以下属性:@property(copy,readwrite)NSString*value; (2认同)