release - 什么时候发布IBOutlet?

标签 release dealloc iboutlet

我使用 Interface Builder 将 GUI 元素连接到 View Controller 中的 IBOutlet,但不确定何时需要在 viewDidUnload 或 dealloc 中释放它们?或两者?

谢谢!

最佳答案

假设它们是属性,您应该将它们设置为 nil在 viewDidUnload 和 dealloc 中,确保使用 setter。所以例如

self.imageView = nil;
self.segmentControl = nil;
/* etc */

将保留属性设置为 nil 具有释放对象并将实例变量设置为 nil 的效果(因此即使没有在中间获得新对象,再次执行相同操作也是安全的)。
viewDidUnload当您的 View Controller 的 View 从内存中弹出时调用,当出现内存警告并且您的 View Controller 当前未使用其 View 时可能会发生这种情况。如果您为自己保留了一些 subview (隐式地,通过“保留”setter 或有意地)并且不释放它们,它们将保留在内存中。您不希望他们这样做,因为您需要在收到内存警告时释放尽可能多的内存,并且如果系统范围内没有足够的内存释放,您或其他进程可能会被终止。因此,既要善待您的用户,也要做一个好公民。

无论您有保留还是分配属性,同样的建议都适用;如果它们被保留,则将属性设置为 nil 将释放,如果它们刚刚被分配,则将属性设置为 nil 将阻止您保留悬空指针。

关于release - 什么时候发布IBOutlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672784/

相关文章:

android - 2 年后更新的 Android 应用程序,无法让它出现在商店中

iphone - Objective-c 指针

c++ - 为什么编译器推迟 std::list 释放?

ios - 连接 IBOutlets、变量、属性或两者?

xcode - 从另一个类更改 IBOutlet 的值

python - python 2. 7's download package "Windows x86 MSI程序数据库”的目的是什么?

iphone - 如何正确释放带有 NSMutableArray 成员且内部有 NSNumber 对象的对象的 NSMutableArray?

iphone - UIVIew Controller 中何时调用 ViewDidUnload 和 Dealloc 方法?

iPhone - dealloc - Release vs. nil

ios - 公共(public) vs 私有(private) IBOutlets