我开始编写iPhone应用程序的第二个版本,我正在尝试整理以前的错误(因为这是我第一次尝试使用Objective-C)。我的问题与“当UIViewController被销毁时我需要做的事情”有关,似乎有一些矛盾的答案,我想确保我理解正确。
一些约束:
因此,考虑到上述约束,以下陈述是真的吗?
感谢您的帮助,
丹
答案 0 :(得分:4)
将故事板连接到UIViewControllers的IBOutlets应该很弱,强大的参考将在幕后创建。
没有。 NSKeyedUnarchiver(NSCoder)不更改与用户创建的插座关联的存储限定符。你保持弱势,因为你没有明确地分配和初始化IBOutlets,因此你不会在单词的可可意义上“拥有”它们。
因为IBOutlets很弱,所以我不应该在低内存情况下将它们弄清楚
根本不是真的。归零弱引用在dealloc中归零,而不是在低内存情况下归零。 Apple希望您通过明确释放强大的出口来处理内存警告来实现这一目标。
我不应该使用viewDidUnload,因为它已被弃用,而是我应该使用didReceiveMemoryWarning。在这种情况下,我只需要排除强大的属性(可以重新计算)
是的,但是对于-viewDidUnload的替换,dealloc就是为了这个目的。
在viewDidLoad上注册NSNotifications是可以接受的。 因为我希望在隐藏视图时继续接收通知,所以取消注册它们的最佳位置是dealloc,在didReceiveMemoryWarning中取消注册它们也没有任何好处。
绝对
答案 1 :(得分:1)
我相信你说的是对的。关于IBOutlets和强/弱引用,请参阅this thread。
至于通知:在didReceiveMemoryWarning中取消注册它们似乎毫无意义,因为它们在取消注册时不会释放任何内存。因此,你在解除分配时取消注册是正确的。