我已经阅读了几个Q& A和文档,其中声明我们应该对IBOutlet使用weak,除非它是来自文件所有者的顶级对象。
但是如果我仍然使用强/保留,是否有任何重大缺点,或者它是多余的,因为子视图已经保留了addSubview:?
注意:请不要在这里复制弱/强的定义,我不需要那样,我想看看真实世界中使用IBOutlet强可能导致问题的情况。感谢。
答案 0 :(得分:1)
使用MRC,如果您使用retain
,则必须自行释放内存。
使用ARC,如果您使用strong
并且系统从您的应用程序请求内存(=您的视图将被卸载),您将必须自己释放内存(请注意,控制器仍将处于活动状态,所以没有dealloc
在那里召唤)
对于大多数商店而言,weak
/ assign
是合适的,因为您不需要关心释放内存。
例外:
IBOutletCollection
必须坚强/保留。视图层次结构不保留集合(NSArray
)。
您可以动态添加/删除视图。如果要从视图层次结构中删除视图并在以后再次使用它,则必须在某处保留视图,否则在删除时将其取消分配。但请注意,您可以在删除时始终将其保留在代码中。
答案 1 :(得分:0)
我会将此标记为“已接受”,直到有人提供更好的答案。
显然唯一的缺点是,当您的视图收到内存警告时,它会卸载视图,并且最佳应释放所有子视图。但是,如果你使用strong,你的控制器仍会保留它们,你必须在viewDidUnload中手动将它们取出。
从iOS 6开始,视图在收到内存警告时未被卸载,因此这无关紧要。从实际的角度来看,对于IBOutlet afaik使用weak或strong之间没有什么重大区别,除非您必须在应用程序中手动卸载视图。