将保留/强类成员variables自动清理卸载视图控制器?

我有以下属性

。H

@property (nonatomic, strong) NSMutableDictionary *cache; 

.M

 @synthesize cache = _cache; 

_cache的数据build立在viewDidLoad上。 现在我想知道,一旦视图控制器被卸载,_cache是​​否会被自动清理,或者我必须明确地做一个_cache = nil;viewWillUnload

无论您是否使用ARC,它们都不会-viewDidUnload-viewDidUnload 。 你必须明确地释放它们(或者在ARC下将它们设置nil )。

最简洁的答案是不。 实例variables不会被自动释放。 它不会导致视图控制器上的dealloc。 被控制的视图被清除。

任何你想清除的,必须在viewDidUnload中明确地完成(注意通过IB添加的variables将被自动放置在该方法中)。

viewDidUnload的典型场景是由控制器pipe理的视图不再在屏幕上(例如,另一个控制器已经用导航控制器推送)。 系统检测到内存压力,并且您的视图已被卸载。

任何对你视图中对象的弱引用都会被自动清除(只要你没有对它们进行额外的强引用)。 在viewDidUnload中,当屏幕上显示视图时,您不需要对可以重新加载的数据的强引用。

执行viewDidUnload和dealloc不一样。 如果您正在pipe理必须发布的资源(或通过KVO或通知中心注册),那么您也需要这样做。 请注意,在这些情况下,您将不得不在viewDidUnload和dealloc(在适当情况下)都执行它们。

无法回答ARC,但viewdidUnload并不意味着VC被释放。 这意味着这个观点正在被释放。 强制它,你可以尝试有一个导航控制器,推几个意见,并在模拟器发送一些内存警告。 viewDidUnload将被调用的不是最高的那个vcs。

回复:ARC,你可以肯定有一个dealloc方法,当vc被释放时会被调用。 根本不要叫超级。

你可以加:

 -(void)dealloc { // If you are using ARC remove the line below [super dealloc] } 

并放置一个断点,它会告诉你什么时候被释放。 dealloc方法也会被ARC调用,只要确保你不要在ARC中调用[super dealloc]。