代码生成器Accessorizer可以选择分配 IBOutlets 而不是保留它们。例如,比较这两条生成的行:
@property(nonatomic,retain)IBOutlet UIImageView *backgroundView;
@property(nonatomic,assign)IBOutlet UIImageView *backgroundView;
为什么我要分配 IBOutlets,同时保留所有其他属性?
代码生成器Accessorizer可以选择分配 IBOutlets 而不是保留它们。例如,比较这两条生成的行:
@property(nonatomic,retain)IBOutlet UIImageView *backgroundView;
@property(nonatomic,assign)IBOutlet UIImageView *backgroundView;
为什么我要分配 IBOutlets,同时保留所有其他属性?
使用取决于内存管理指南中指定的平台:
“出口的行为取决于平台(参见“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;"
在 iPhone OS 上,您的视图可能会被卸载(在内存不足的情况下),但如果您在连接到插座的某些视图中有您关心的状态,您不想丢失它。所以你想保留它们。
说一个导航控制器。根视图从发送到控制器的低内存警告中卸载,但堆栈上方有一堆控制器。当您弹回根目录时,它会重新加载视图并将您的插座放回它们曾经处于相同状态的位置。
至少,我认为这是技术原因。
但在更一般的意义上,您的控制器关心这些视图,因为它想与它们交互。仅这一点就意味着您想保留它们,并在不再关心时释放它们。这只是一个好习惯。
IBOutlet
被定义为无。命令单击 Xcode 中的单词以查看其定义。
也就是说,它只是一个钩子,因此界面构建器知道要显示它。我从未见过@property
which include IBOutlet
,但我想它适用于需要从 IB 访问的情况,但也可以在运行时分配UIViewController
。@property
view