Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS 6中将委托设置为零_Ios_Ios6 - Fatal编程技术网

在iOS 6中将委托设置为零

在iOS 6中将委托设置为零,ios,ios6,Ios,Ios6,在iOS 6之前,我们应该 - (void)viewDidUnload { self.someDelegate = nil; [super viewDidUnload]; } 既然viewDidUnload已被弃用,我们在哪里将委托设置为零?谢谢 好吧,这不是我自己想出来的,但是如果我能帮助你:“在iOS 6中,UIViewController的viewWillUnload和viewDidUnload方法现在已被弃用。如果使用这些方法发布数据,请改用didReceiveMemory

在iOS 6之前,我们应该

- (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; [超级视频下载]; }
你在哪里听到的

你知道iOS 6之前的
viewDidUnload
是什么吗

viewDidUnload
仅在内存不足的情况下调用,这会导致卸载视图。在正常操作期间,它将永远不会被使用。如果您依赖调用它来执行其他操作,则这是错误的

另外,您为什么还要将
self
的委托设置为nil?“Niling the delegate”指的是在解除分配
self
时将其他对象的委托(指向
self
)设置为
nil
。设置
self
的委托没有意义(如果不再使用
self
,您为什么会在意在
self
上设置内容?)

在iOS 6之前,我们应该

  • (无效)视图卸载{ self.someDelegate=nil; [超级视频下载]; }
你在哪里听到的

你知道iOS 6之前的
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];
}