在viewDidUnload
中我将IBOutlets
设置为nil,我还将NSString
个对象设置为nil。这些是(nonatomic,strong)
。将NSString
个对象设置为nil是否有意义?
答案 0 :(得分:3)
请注意,您未将任何对象设置为nil
。你设置为nil
的是你的一个对象的指针,因此它不再指向任何东西。
这意味着如果在其他对象中有其他实例变量指向您的字符串,它们将不会在对象中看到任何差异 - 它们仍将指向相同的旧字符串,具有相同的未更改的内容。
但是,回答你的问题:nil
输出你的变量是有意义的,但是如果你的视图控制器被解除分配,那么实例变量也将被释放。因此,如果您的字符串较小,则nil
中viewDidUnload
可能没有迫切需要{{1}}。
答案 1 :(得分:1)
viewDidUnload
,虽然它仍然存在,但应该用于删除您可以在loadView
或viewDidLoad
中重新创建的任何内容。
如果字符串属性是视图控制器模型的一部分,并且无法重新创建,则不要删除它们。
不保证调用该方法 - 只有在视图控制器处于屏幕外时才会调用该方法,但系统已经受到内存压力。它与viewWillAppear
或viewDidDisappear
不同。不应将其与您的视图控制器的dealloc
方法混淆。
答案 2 :(得分:0)
如果您手动管理内存,则不必将插座本身设置为nil,只需将链接对象设置为nil。
例如,如果您有@property (nonatomic,strong)IBOutlet UIImageView *imageView;
您只需要将图片视图设置为nil - imageView = nil;
答案 3 :(得分:0)
-viewDidUnload
仅用于释放在-viewDidLoad
或-loadView
中创建的对象,包括IBOutlets。
如果您未在-loadView
或-viewDidLoad
中分配这些字符串,则在-viewDidUnload
中发布这些字符串是错误的。