2

我已经阅读了几个问答和文档,其中指出我们应该为 IBOutlet 使用弱,除非它是来自文件所有者的顶级对象。

但是如果我仍然使用强/保留,是否有任何重大缺点,或者它只是多余的,因为子视图已经被 addSubview: 保留了?

注意:请不要在这里复制弱/强的定义,我不需要,我想看看现实世界中使用强用于 IBOutlet 可能会导致问题的案例。谢谢。

4

2 回答 2

1

使用 MRC,如果使用retain,则必须自己释放内存。

使用 ARC,如果您使用strong并且系统从您的应用程序请求内存(= 您的视图将被卸载),您将不得不自己释放内存(请注意,控制器仍将处于活动状态,因此不会dealloc在那里调用)

对于大多数网点来说,weak/assign是合适的,因为您不需要关心释放内存。

例外:

  1. IBOutletCollection必须坚强/保持。NSArray视图层次结构不保留集合 ( )。

  2. 您可以动态添加/删除视图。如果您想从视图层次结构中删除视图并稍后再次使用它,则必须将视图保留在某处,否则在删除时它会被释放。但是,请注意,您始终可以在删除时将其保留在代码中。

于 2013-07-17T09:46:37.730 回答
0

在有人提供更好的答案之前,我会将其标记为“已接受”。

显然,唯一的缺点是当您的视图收到内存警告时,它会卸载视图,并且最好释放所有子视图。但是,如果你使用 strong,你的控制器仍然会保留它们,你必须在 viewDidUnload 中手动将它们清零。

从 iOS 6 开始,在收到内存警告时不会卸载视图,因此这变得无关紧要。从实际的角度来看,对 IBOutlet afaik 使用弱或强没有重大区别,除非您必须在应用程序中手动卸载视图。

于 2013-07-17T09:25:45.063 回答