使用xcode 4.2 for iPhone app,不使用ARC ---
当我使用界面构建器创建插座时,xcode会在我的viewController中添加两行代码。一个在viewDidUnload中: - [self setMyOutlet:nil]
,第二个在dealloc - [myOutlet release]
。
我理解后者(发布)。但是为什么在viewDidUnload中将插座设置为nil。是不是在dealloc之前调用viewDidUnload并且不会将出口设置为nil否定dealloc中的释放操作?设置为nil有意义我会考虑构建一个使用垃圾收集的Mac应用程序 - 但它对于iPhone应用程序没有意义。
为什么界面构建器会这样做?我应该删除将出口设置为零的行吗?
答案 0 :(得分:3)
viewDidUnload
可能会被调用,可能不会被调用。这取决于当前的内存使用情况。 dealloc
是您应该清理所有属性(如数组,自定义对象)的地方。在viewDidUnload
中,您可以清理视图以及为支持视图而创建的对象。 viewDidUnload
表示您的视图已卸载(但不是整个视图控制器),并且可能会在将来再次创建和加载(当然,在viewDidLoad中)。
答案 1 :(得分:0)
每次调用dealloc之前都不会调用viewDidUnload,看看苹果文档说的是什么..
当出现内存不足的情况和当前视图控制器时 如果不需要视图,系统可能会选择从中删除这些视图 记忆。在视图控制器的视图之后调用此方法 已经发布,你有机会进行任何最后的清理工作。如果你的 视图控制器存储对视图或其视图的单独引用 子视图,您应该使用此方法来释放这些引用。您 也可以使用此方法删除对您的任何对象的引用 创建以支持视图但现在不再需要了 观点消失了。您不应该使用此方法来释放用户数据或 任何其他无法轻易重建的信息。
所以它背后的想法也是释放任何可以轻松创建的不需要的对象。 现在来到它将属性设置为nil的部分..它这样做是因为这样你释放所有内存并将对象设置为nil(从而降低你的内存使用量),之后如果dealloc被称为你的app不会像在objective-c中那样崩溃,你可以将发布消息发送给nil对象..
我建议你阅读苹果ViewController Programming Guide,它会清除你的很多问题....希望这能清除一些空气......:D