objective-c - 在 setter 中哪里释放副本?

标签 objective-c cocoa

在我的 setter 中,我正在复制一个传入字符串,以避免修改原始字符串时出现任何麻烦。

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

我的问题是:当我正在制作副本时,我应该在哪里发布它,或者我只是做一个自动发布?即

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

加里

最佳答案

当您进行复制时,该对象将被保留。 这就是你想要的。如果你自动释放它,它最终会被释放。所以你的第一个例子是正确的。第二个将使您的应用程序崩溃。

如果您担心对象被释放时会发生什么,请记住您应该release dealloc 方法中的所有引用。

关于objective-c - 在 setter 中哪里释放副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500213/

相关文章:

cocoa - 获取 NSAppleEventDescriptor 的 AppleScript 属性

iphone - 如何为我的 View 调整大小设置动画?

objective-c - MacOS PDF/WKWebView 打印质量差

macos - 将 NSOpenPanel 的默认目录更改为 "Media"目录

cocoa - 选择器作为属性问题

macos - 操作系统: NSButton with tag is not recognized

iphone - 在 iOS 中使用 GCD

ios:通过循环命名 View

c++ - 用于将 JPEG 图像转换为 TIFF 格式的 C、C++ 或 Objective-C 代码

iphone - 自动注销iphone应用程序