我使用 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/