objective-c - 在 dealloc 中释放实例变量的正确方法,Objective C

标签 objective-c cocoa instance-variables accessor dealloc

我一直想知道在类的dealloc方法中释放实例变量的正确方法。假设我有一个名为 myString 的实例变量,

// MyClass.h
{
NSString *myString;
}
@property(nonatomic,retain) NSString *myString;

// MyClass.m
@synthesize myString;

-(void)dealloc
{
[self setMyString: nil]; 
[super dealloc];
}

Apple 文档指出不要在初始化方法和 dealloc 中使用访问器方法。我发现一些输入将实例变量设置为 nil 可以完成释放实例变量的工作(我在上面的 dealloc 方法中执行此操作)。那么,如果这是释放实例变量的正确方法,那么为什么 Apple 说不建议在 dealloc 方法中使用访问器呢?

最佳答案

您应该在对象上调用release;

-(void)dealloc {
   [myString release], myString = nil;
   [super dealloc];
}

它与多线程有关,其中可能有其他线程也在访问该属性。

但是你应该更多地使用 ARC,这样你就不必将 dealloc 添加到你的任何对象,编译器将为你添加保留/释放消息编译时间。

Apple 发布了一个不错的 Transitioning to ARC Release Notes

关于objective-c - 在 dealloc 中释放实例变量的正确方法,Objective C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22711644/

相关文章:

iphone - 如何从位置列表中获取最近的区域?

java - 最终实例变量的意义是什么?

python - 一个实例属性引用另一个实例属性,并在类实例化后进行更新

c# - 替代 C# 中的动态变量名

objective-c - 如何使用 UIPopOverController 制作一个在 iPhone 上使用 ImagePicker 的 iPhone 应用程序?

ios - viewDidLoad 无限重新加载

iphone - 释放导航 Controller 堆栈中特定 UIVIewController 的内存

cocoa - 获取无边框窗口来接收 mouseMoved 事件 (Cocoa OSX)

macos - 复制像《Mountain Lion》中的通知中心一样向一侧滑动的屏幕?

objective-c - NSTextField 光标仅在第二次鼠标输入时更改