将 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,虽然它仍然存在,但应该用于删除您可以在loadViewviewDidLoad 中重新创建的任何内容。

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

该方法不能保证被调用——它只会在视图控制器离开屏幕时被调用,但是系统已经承受了内存压力。它不像viewWillAppearviewDidDisappear。它不应与您的视图控制器的 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 对象设置为零有意义吗?的主要内容,如果未能解决你的问题,请参考以下文章

拥有多个 NSPersistentStoreCoordinator 有意义吗?

如果(!这个)返回; 在 C# 中有意义吗?

Python中的弃用警告,在这里有意义吗?

覆盖ActiveRecord子类中的'=='方法有意义吗?

将 CPU 与 GPU 进行比较——总是有意义吗?

将导出的 grafana csv 文件导入 python pandas 有意义吗?