将NSString对象设置为nil是否有意义?

时间:2012-09-05 19:56:51

标签: objective-c ios cocoa-touch

viewDidUnload中我将IBOutlets设置为nil,我还将NSString个对象设置为nil。这些是(nonatomic,strong)。将NSString个对象设置为nil是否有意义?

4 个答案:

答案 0 :(得分:3)

请注意,您未将任何对象设置为nil。你设置为nil的是你的一个对象的指针,因此它不再指向任何东西。

这意味着如果在其他对象中有其他实例变量指向您的字符串,它们将不会在对象中看到任何差异 - 它们仍将指向相同的旧字符串,具有相同的未更改的内容。

但是,回答你的问题:nil输出你的变量是有意义的,但是如果你的视图控制器被解除分配,那么实例变量也将被释放。因此,如果您的字符串较小,则nilviewDidUnload可能没有迫切需要{{1}}。

答案 1 :(得分:1)

viewDidUnload,虽然它仍然存在,但应该用于删除您可以在loadViewviewDidLoad中重新创建的任何内容。

如果字符串属性是视图控制器模型的一部分,并且无法重新创建,则不要删除它们。

不保证调用该方法 - 只有在视图控制器处于屏幕外时才会调用该方法,但系统已经受到内存压力。它与viewWillAppearviewDidDisappear不同。不应将其与您的视图控制器的dealloc方法混淆。

答案 2 :(得分:0)

如果您手动管理内存,则不必将插座本身设置为nil,只需将链接对象设置为nil。

例如,如果您有@property (nonatomic,strong)IBOutlet UIImageView *imageView;

您只需要将图片视图设置为nil - imageView = nil;

答案 3 :(得分:0)

-viewDidUnload仅用于释放在-viewDidLoad-loadView中创建的对象,包括IBOutlets。

如果您未在-loadView-viewDidLoad中分配这些字符串,则在-viewDidUnload中发布这些字符串是错误的。

相关问题