6

代码生成器Accessorizer可以选择分配 IBOutlets 而不是保留它们。例如,比较这两条生成的行:

@property(nonatomic,retain)IBOutlet UIImageView *backgroundView;
@property(nonatomic,assign)IBOutlet UIImageView *backgroundView;

为什么我要分配 IBOutlets,同时保留所有其他属性?

4

3 回答 3

15

使用取决于内存管理指南中指定的平台:

“出口的行为取决于平台(参见“Mac OS X Desktop”和“iPhone”),因此实际声明有所不同:

  For Mac OS X, you should use:

  @property (assign) IBOutlet UserInterfaceElementClass *anOutlet;

  For iPhone OS, you should use:

  @property (nonatomic, retain) IBOutlet UIUserInterfaceElementClass *anOutlet;"
于 2010-01-23T01:32:12.560 回答
4

在 iPhone OS 上,您的视图可能会被卸载(在内存不足的情况下),但如果您在连接到插座的某些视图中有您关心的状态,您不想丢失它。所以你想保留它们。

说一个导航控制器。根视图从发送到控制器的低内存警告中卸载,但堆栈上方有一堆控制器。当您弹回根目录时,它会重新加载视图并将您的插座放回它们曾经处于相同状态的位置。

至少,我认为这是技术原因。

但在更一般的意义上,您的控制器关心这些视图,因为它想与它们交互。仅这一点就意味着您想保留它们,并在不再关心时释放它们。这只是一个好习惯。

于 2010-01-23T01:39:41.870 回答
-4

IBOutlet被定义为无。命令单击 Xcode 中的单词以查看其定义。

也就是说,它只是一个钩子,因此界面构建器知道要显示它。我从未见过@propertywhich include IBOutlet,但我想它适用于需要从 IB 访问的情况,但也可以在运行时分配UIViewController@property view

于 2010-01-23T01:40:45.003 回答