问题描述
|
一般来说,何时应在Objective C中将变量设为实例变量?
例如,假设我有一个带有UILabel的UIViewController。在什么情况下,我会将UILabel作为实例变量而不是像这样做:
UILabel *label = [[UILabel alloc] init];
//set text of label
[view.addSubview label];
[label release];
解决方法
在您的特定示例中,对象被编写为变量,以便在将其添加到视图(保留它)之后可以向其发送“ 1”消息。
没有变量的等效代码是:
[view addSubview:[[[UILabel alloc] init] autorelease]];
我们不需要发送发布,因为我们正在自动释放对象。
, 如果您对任何资源都需要中等持久性的句柄,则应将其设为实例变量,前提是所讨论的资源至少应保持中等持久性。
在上面的示例中,是。标签应该是一个实例变量,可能是使用IBOutlet分配的实例变量。
一般而言,UIKit中存在的大多数东西(与Foundation相对)都受益于通过NIB文件实例化并随后通过出口进行访问。
这不只是性能问题;在大多数情况下,它还与内存管理和碎片化以及简化翻译和国际化有关。
, 对于您的特定情况,如果您以后需要访问该标签(例如更改文本),则保留ivar可以节省您尝试再次查找它的精力。
一般原因是持久性,范围和便利性。