2012-09-05 30 views
1

viewDidUnload我在那里设置IBOutlets为零,我也设置NSString对象为零。这些是(nonatomic,strong)。将NSString对象设置为零是否有意义?将NSString对象设置为零是否有意义?

+1

您使用ARC吗? – woz

+0

看到这个问题:http://stackoverflow.com/questions/1210776/objective-c-difference-between-setting-nil-and-releasing – buildsucceeded

+0

是的,我正在使用ARC。 – NCFUSN

回答

0

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

如果您没有在-loadView-viewDidLoad中分配这些字符串,那么在-viewDidUnload中释放它们是错误的。

+0

这些字符串是我的实例变量。 – NCFUSN

+0

IButlets呢?他们是在“viewDidUnload”方法中创建的吗? – harshitgupta

0

如果您手动管理内存,那么您不必将出口本身设置为零,只有与其链接的对象。

举例来说,如果你有@property (nonatomic,strong)IBOutlet UIImageView *imageView;

你只需要设置图像以零 - imageView = nil;

+0

ARC与viewDidUnload – jrturton

+0

无关@jrturton感谢您打电话给我,我不知道我在想什么。 –

1

viewDidUnload,而它仍然存在,应该被用来删除任何东西,你可以重新在loadViewviewDidLoad中创建。

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

该方法不保证被调用 - 它只会在视图控制器不在屏幕上时调用,但系统受到内存压力。它不像viewWillAppearviewDidDisappear。它不应该与您的视图控制器的方法相混淆。

3

请注意,您没有设置任何对象nil。你所做的设置为nil指针到你的一个对象,所以它不会指向任何东西。

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

但是,要回答你的问题:它确实对你的变量nil有意义,但是如果和当你的视图控制器被解除分配时,那么实例变量也将被解除分配。所以如果你的琴弦很小,可能不需要nil他们在viewDidUnload

相关问题