嗨,我的申请表中有这个:问题是,我应该放self.label =nil
;在viewDidUnload
?如果是,为什么?
//.h
@interface MyClass
@property (nonatomic, retain) IBOutlet UILabel *label;
@end
//.m
@implementation Myclass
@syntesize label = label_;
- (void)dealloc
{
self.label =nil;
}
@end
答案 0 :(得分:3)
是的,您应该在nil
和viewDidUnload
中将label属性设置为dealloc
。在低内存情况下调用viewDidUnload
,使应用程序能够清除不需要的内存。
未在nil
中将其设置为viewDidUnload
通常不会导致内存泄漏,但会阻止应用在需要时保存内存。
答案 1 :(得分:3)
你应该这样做。
在低内存条件下调用 viewDidUnload
。因此,如果您想在此方法中清除呼叫self.yourOutlet = nil
。此外,它允许您为您的应用程序节省额外的内存。
下次(调用viewDidUnload
方法后)您的view
将再次加载到内存中(viewDidLoad
将被调用),您的插座将正确设置。
根据经验,您在IBOutlet
中发布的任何dealloc
也应该在此方法中发布(引用设置为nil,如self.label = nil
)。
备注
您不应在self.label = nil;
中致电dealloc
。而是按Apple Memory Management Guide中记录的[label_ release];
进行操作。
此外,Stack Overflow搜索是你的朋友:
When is UIViewController viewDidUnload called?
When should I release objects in -(void)viewDidUnload rather than in -dealloc?
希望有所帮助。
修改强>
如果您不使用ARC(我认为不是),您还应该像下面这样呼叫[super dealloc];
:
- (void)dealloc
{
[label_ release];
[super dealloc];
}
答案 2 :(得分:1)
你应该。虽然在大多数情况下不是必需的,但在viewDidUnload上将所有指向对象的指针设置为nil被认为是一种好习惯。 Paul Hegarty在CS193P第8讲,Controller Lifecycle上解释说。
您可以在此处观看:http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255?mt=2
答案 3 :(得分:-2)
你可以把它,但你也可以把[标签发布],self.label = nil;或者只是[标签发布];
这是内存管理,以便为该对象保留的内存被垃圾收集[内存释放]。在旧的iphone 3g上非常重要,因为它有较少的内存供用户运行程序,但在较新的iphone 4 + / ios 5.x中最少,因为它使用了弧线,你可以跳过如果你使用ARC项目