在iOS 6中将委托设置为零
在iOS 6之前,我们应该在iOS 6中将委托设置为零,ios,ios6,Ios,Ios6,在iOS 6之前,我们应该 - (void)viewDidUnload { self.someDelegate = nil; [super viewDidUnload]; } 既然viewDidUnload已被弃用,我们在哪里将委托设置为零?谢谢 好吧,这不是我自己想出来的,但是如果我能帮助你:“在iOS 6中,UIViewController的viewWillUnload和viewDidUnload方法现在已被弃用。如果使用这些方法发布数据,请改用didReceiveMemory
- (void)viewDidUnload {
self.someDelegate = nil;
[super viewDidUnload];
}
既然viewDidUnload已被弃用,我们在哪里将委托设置为零?谢谢 好吧,这不是我自己想出来的,但是如果我能帮助你:“在iOS 6中,UIViewController的viewWillUnload和viewDidUnload方法现在已被弃用。如果使用这些方法发布数据,请改用didReceiveMemoryWarning方法。如果未使用视图控制器的视图,也可以使用此方法释放对该视图的引用。在执行此操作之前,您需要测试视图是否不在窗口中。”
好吧,我自己并没有想到这一点,但是如果我能帮助你的话:“在iOS 6中,UIViewController的viewWillUnload和viewDidUnload方法现在已经不推荐使用了。如果使用这些方法发布数据,请改用didReceiveMemoryWarning方法。如果未使用视图控制器的视图,也可以使用此方法释放对该视图的引用。在执行此操作之前,您需要测试视图是否不在窗口中。”
在iOS6中收到内存警告时,视图不再卸载。因此,在这种情况下,视图永远不会卸载,并且在iOS6中永远不会调用
viewDidUnload
如果您真的想模仿旧的行为(在收到内存警告时卸载视图),您现在必须在测试self.view.window
属性为nil(意味着视图不再显示在屏幕上,因此将被删除)后,在视图控制器的didReceiveMemoryWarning
方法中实现此行为卸载”,这意味着您与旧的viewDidUnload
案例处于相同的情况
但是请注意,如果使用ARC和iOS5+,通常不需要再将代理设置为nil
,这要归功于weak
属性和归零弱引用机制,如果它们指向的对象不再存在,该机制会自动将弱变量和属性重置为nil
(从而避免指针悬空)
[编辑]正如@Martin R在注释中所解释的,当在iOS6中收到内存警告时,视图不再卸载,因此您不必管理收到内存警告的情况,也不必考虑在那里释放您的委托,因为在iOS6中不再出现此用例。在iOS6中收到内存警告时,视图不再卸载因此,在这种情况下,永远不会卸载视图,并且在iOS6中永远不会调用
viewDidUnload
如果您真的想模仿旧的行为(在收到内存警告时卸载视图),您现在必须在测试self.view.window
属性为nil(意味着视图不再显示在屏幕上,因此将被删除)后,在视图控制器的didReceiveMemoryWarning
方法中实现此行为卸载”,这意味着您与旧的viewDidUnload
案例处于相同的情况
但是请注意,如果使用ARC和iOS5+,通常不需要再将代理设置为nil
,这要归功于weak
属性和归零弱引用机制,如果它们指向的对象不再存在,该机制会自动将弱变量和属性重置为nil
(从而避免指针悬空)
[编辑]正如@Martin R在评论中所解释的,当在iOS6中收到内存警告时,视图不再被卸载,因此您不必管理收到内存警告的情况,也不必考虑在那里释放您的委托,因为在iOS6中不再出现此用例
在iOS 6之前,我们应该
- (无效)视图卸载{ self.someDelegate=nil; [超级视频下载]; }
viewDidUnload
是什么吗
viewDidUnload
仅在内存不足的情况下调用,这会导致卸载视图。在正常操作期间,它将永远不会被使用。如果您依赖调用它来执行其他操作,则这是错误的
另外,您为什么还要将self
的委托设置为nil?“Niling the delegate”指的是在解除分配self
时将其他对象的委托(指向self
)设置为nil
。设置self
的委托没有意义(如果不再使用self
,您为什么会在意在self
上设置内容?)
在iOS 6之前,我们应该
- (无效)视图卸载{ self.someDelegate=nil; [超级视频下载]; }
viewDidUnload
是什么吗
viewDidUnload
仅在内存不足的情况下调用,这会导致卸载视图。在正常操作期间,它将永远不会被使用。如果您依赖调用它来执行其他操作,则这是错误的
另外,您为什么还要将
self
的委托设置为nil?“Niling the delegate”指的是在解除分配self
时将其他对象的委托(指向self
)设置为nil
。设置self
的委托没有意义(如果不再使用self
,你为什么会在意在self
上设置内容?).您在哪里看到这些方法被弃用?我相信这些方法没有弃用。您在哪里看到这些方法被弃用?我相信这些方法没有弃用。一些补充:在测试self.view.window
为nil
之前,您应该测试视图是否已加载,以避免加载不必要的视图(如果您调用self.view
但尚未加载,则会出现这种情况)在这种情况下,我已更新了答案以提供一些代码。self.viewLoaded
应为self.isView
-(void)didReceiveMemoryWarning
{
if (self.isViewLoaded && !self.view.window)
{
// If view already loaded but not displayed on screen at this time (not attached to any window) then unload it
self.view = nil;
// Then do here what you used to do in viewDidUnload
self.someDelegate = nil;
...
}
[super didReceiveMemoryWarning];
}