iOS中奥特莱斯的内存管理

时间:2012-07-04 12:39:21

标签: objective-c ios

嗨,我的申请表中有这个:问题是,我应该放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

4 个答案:

答案 0 :(得分:3)

是的,您应该在nilviewDidUnload中将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项目