6

Cocoa 的内存管理编程指南中, Apple 谈到了顶级对象。他们说,我需要为他们每个人提供一个奥特莱斯。

但是,如果有任何顶级对象未存储在 outlet 中,则必须保留 loadNibNamed:owner:options: 方法返回的数组或数组中的对象,以防止这些对象过早释放。

那么“顶级对象”到底是什么意思呢?我会说他们谈论根视图和窗口。还有什么?这个提示是否仅适用于我想手动加载笔尖的情况?或者它适用于任何笔尖和任何情况?

4

3 回答 3

6

顶级对象是出现在 Interface Builder 的主 nib 窗口中的对象,而不是文件的所有者和应用程序。

于 2009-04-30T00:28:48.883 回答
3

是的,这是关于手动加载 Nib 的情况,否则您不会调用loadNibNamed:owner:options:

于 2009-04-29T22:36:13.660 回答
0

带有文件所有者、第一响应者、视图的窗口中出现的对象是顶级对象。您添加到视图中的任何内容都将成为子视图 - 所有子视图都由它们的直接父视图保留,因此它们不需要在其他地方保留。视图本身由视图控制器保留,因此不需要保留。

如果您添加非视图对象,或者您没有立即放入主视图的视图(例如当前未显示的工具栏按钮),您需要保留它们,否则它们将被释放。我首选的方法是使用 @property 使用 IBOutlets,如下所示:

@property(nonatomic, retain) IBOutlet UIBarButtonItem * myButton;

这会导致 -setMyButton: 在文件所有者上被调用(如果此代码在文件所有者中),并且通过 IB 连接的对象被发送以存储在此属性中。

于 2010-11-10T03:31:22.157 回答