将 NSString 对象设置为零有意义吗?
Posted
技术标签:
【中文标题】将 NSString 对象设置为零有意义吗?【英文标题】:Does it make sense to set NSString objects to nil? 【发布时间】:2012-09-05 19:56:51 【问题描述】:在viewDidUnload
中,我将IBOutlets
设置为nil,我还将NSString
对象设置为nil。这些是(nonatomic,strong)
。将 NSString
对象设置为 nil 是否有意义?
【问题讨论】:
看到这个问题:***.com/questions/1210776/… 【参考方案1】:请注意,您没有将任何对象设置为nil
。您对nil
所做的设置是指向您的一个对象的指针,因此它不再指向任何东西。
这意味着,如果您在其他对象中有其他实例变量指向您的字符串,它们将不会看到对象中的任何差异 - 它们仍将指向相同的旧字符串,具有相同的、未更改的内容。
但是,回答您的问题:nil
出您的变量确实有意义,但是如果您的视图控制器被解除分配,那么实例变量也将被解除分配。因此,如果您的字符串很小,则可能没有迫切需要将nil
发送到viewDidUnload
中。
【讨论】:
【参考方案2】:viewDidUnload
,虽然它仍然存在,但应该用于删除您可以在loadView
或viewDidLoad
中重新创建的任何内容。
如果字符串属性是视图控制器模型的一部分,并且无法重新创建,则不要删除它们。
该方法不能保证被调用——它只会在视图控制器离开屏幕时被调用,但是系统已经承受了内存压力。它不像viewWillAppear
或viewDidDisappear
。它不应与您的视图控制器的 dealloc
方法相混淆。
【讨论】:
【参考方案3】:-viewDidUnload
仅用于释放在-viewDidLoad
或-loadView
中创建的对象,包括 IBOutlets。
如果你不在-loadView
或-viewDidLoad
中分配这些字符串,那么在-viewDidUnload
中释放它们是错误的。
【讨论】:
这些字符串是我的实例变量。 IButlets 怎么样?它们是在“viewDidUnload”方法中创建的吗?【参考方案4】:如果您手动管理内存,则不必将 outlet 本身设置为 nil,只需将链接到它的对象设置为 nil。
例如,如果您有@property (nonatomic,strong)IBOutlet UIImageView *imageView;
你只需要将图像视图设置为 nil - imageView = nil;
【讨论】:
ARC 与 viewDidUnload 无关 @jrturton 谢谢你打电话给我,我不知道我在想什么。以上是关于将 NSString 对象设置为零有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章