1

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

4 回答 4

3

是的,您应该将 label 属性设置为nilinviewDidUnload和 in deallocviewDidUnload在内存不足的情况下调用,这使应用程序能够清除不需要的内存。

不将其设置为nilinviewDidUnload通常不会导致内存泄漏,但它会阻止应用程序在需要时节省内存。

于 2012-07-04T12:47:24.387 回答
3

你应该做。

viewDidUnload在内存不足的情况下调用。所以如果你想清理调用self.yourOutlet = nil也可以用这个方法。此外,它还允许您为应用程序节省额外的内存。

下一次(在viewDidUnload调用方法之后)您view将再次加载到内存中(viewDidLoad将被调用)并且您的插座将被正确设置。

根据经验IBOutlet,您在 中发布的任何 sdealloc也应该self.label = nil在此方法中发布(引用设置为 nil like )。

一张纸条

你不应该打电话self.label = nil;dealloc。而是[label_ release];按照Apple Memory Management Guide中的说明进行操作。

此外,Stack Overflow 搜索是您的朋友:

何时调用 UIViewController viewDidUnload?

我什么时候应该在 -(void)viewDidUnload 而不是 -dealloc 中释放对象?

希望有帮助。

编辑

如果你不使用 ARC(我认为不是),你也应该[super dealloc];像下面这样调用:

- (void)dealloc
{
   [label_ release];

   [super dealloc];
}
于 2012-07-04T12:57:19.750 回答
1

你应该。尽管在大多数情况下没有必要,但在 viewDidUnload 上将所有指向对象的指针设置为 nil 被认为是一种很好的做法。Paul Hegarty 在 CS193P 第 8 讲“控制器生命周期”中解释了这一点。

你可以在这里观看:http: //itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255 ?mt=2

于 2012-07-04T12:47:05.340 回答
-2

可以放这个,也可以放[label release], self.label = nil; 或者只是[标签发布];

它是内存管理,以便为该对象保留的内存被垃圾收集[内存释放]。在旧的 iphone 3g 上非常重要,因为它有更少的内存供用户运行程序,但在较新的 iphone 4+/ios 5.x 中却很少,因为它使用 arc,如果你使用 ARC 项目,你可以跳过它。

于 2012-07-04T12:43:50.587 回答