在Objective-C中分配IBOutlet

在Objective-C中分配IBOutlet,objective-c,iboutlet,Objective C,Iboutlet,代码生成器可以选择分配IBOutlet,而不是保留它们。例如,比较这两个生成的行: @property(nonatomic,retain)IBOutlet UIImageView *backgroundView; @property(nonatomic,assign)IBOutlet UIImageView *backgroundView; 为什么我要在保留所有其他属性的情况下分配IBOutlets?使用情况取决于以下中指定的平台: “门店的行为取决于 平台(请参阅“Mac OS X桌面” 和

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

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

为什么我要在保留所有其他属性的情况下分配IBOutlets?

使用情况取决于以下中指定的平台:

“门店的行为取决于 平台(请参阅“Mac OS X桌面” 和“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;"

在iPhone操作系统上,您的视图可能会被卸载(在内存不足的情况下),但如果您在连接到Outlet的某些视图中有您关心的状态,您不想丢失它。因此,您希望保留它们

比如说导航控制器。根视图从发送给控制器的内存不足警告中卸载,但堆栈上有一堆控制器。当您弹回到根时,它会重新加载视图,并将您的插座粘回到原来的状态

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


但从更一般的意义上讲,您的控制器关心这些视图,因为它希望与它们交互。这一事实本身就意味着您希望保留它们,并在不再关心时释放它们。这只是一种良好的做法。

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

也就是说,它只是一个钩子,所以界面生成器知道如何显示它。
我从未见过
@property
包含
IBOutlet
,但我认为它适用于
UIViewController
@property
视图
等需要从IB访问,但也可以在运行时分配的情况。

使用(保留)没有错在MacOSX上,您只需平衡保留和释放。