在viewDidUnload
我确实设置IBOutlets
为零的地方,我也将NSString
对象设置为零。这些是(nonatomic,strong)
。NSString
将对象设置为零是否有意义?
4 回答
请注意,您没有将任何对象设置为nil
. 您所做的设置nil
是指向您的对象之一的指针,因此它不再指向任何东西。
这意味着,如果您在其他对象中有其他实例变量指向您的字符串,它们将不会看到对象中的任何差异——它们仍将指向相同的旧字符串,具有相同的、未更改的内容。
但是,要回答您的问题:取出变量确实有意义nil
,但是如果以及当您的视图控制器被释放时,实例变量也将被释放。因此,如果您的琴弦很小,则可能没有迫切需要将nil
它们放入viewDidUnload
.
viewDidUnload
,虽然它仍然存在,但应该用于删除您可以在loadView
或中重新创建的任何内容viewDidLoad
。
如果字符串属性是视图控制器模型的一部分,并且无法重新创建,则不要删除它们。
该方法不能保证被调用——它只会在视图控制器离开屏幕时被调用,但系统已经受到内存压力。它不像viewWillAppear
或viewDidDisappear
。它不应该与您的视图控制器的dealloc
方法相混淆。
如果您手动管理内存,则不必将插座本身设置为零,只需将与其链接的对象设置为。
例如,如果您有@property (nonatomic,strong)IBOutlet UIImageView *imageView;
您只需要将图像视图设置为 nil -imageView = nil;
-viewDidUnload
仅用于释放在-viewDidLoad
或中创建的对象-loadView
,包括 IBOutlets。
如果您不分配这些字符串,-loadView
或者-viewDidLoad
将它们释放在-viewDidUnload
.