Ios6 国家统计局;是否在iOS 6中收到记忆警告

Ios6 国家统计局;是否在iOS 6中收到记忆警告,ios6,nsnotifications,didreceivememorywarning,viewdidunload,Ios6,Nsnotifications,Didreceivememorywarning,Viewdidunload,从iOS 6.0开始,不推荐使用viewDidUnload方法。在iOS 6之前,我曾在viewDidUnload方法中移除NSNotification的观察者。但由于它已被弃用,我已将其移至didReceiveMemoryWarning。现在,如果我的应用程序收到内存不足警告,通知将被删除。所以我用NSNotification编写的代码不起作用 有人能告诉我如何解决这个问题吗 提前感谢。我假设您在viewDidLoad中添加了观测者。问题在于,即使在内存不足的情况下,iOS 6上的视图也不会被

从iOS 6.0开始,不推荐使用viewDidUnload方法。在iOS 6之前,我曾在viewDidUnload方法中移除NSNotification的观察者。但由于它已被弃用,我已将其移至didReceiveMemoryWarning。现在,如果我的应用程序收到内存不足警告,通知将被删除。所以我用NSNotification编写的代码不起作用

有人能告诉我如何解决这个问题吗


提前感谢。

我假设您在
viewDidLoad
中添加了观测者。问题在于,即使在内存不足的情况下,iOS 6上的视图也不会被卸载。因此,如果在
direceivememorywarning
中删除观察者,将不会再次调用
viewDidLoad

有两个相对简单的备选方案可供选择:

  • 视图中添加观察者将出现
    ,并在
    视图中将其删除
  • initXXX
    方法中添加观察者,并在
    dealoc
    中删除它

我可以在
viewDidLoad
中添加观察者,并在
direceivememorywarning
中删除它。但是,您必须在
direceivememorywarning
中“手动卸载”视图,以便以后再次调用
viewDidLoad
。例如,有关如何强制卸载视图的示例代码,请参见。

我假设您在
viewDidLoad
中添加了观察者。问题在于,即使在内存不足的情况下,iOS 6上的视图也不会被卸载。因此,如果在
direceivememorywarning
中删除观察者,将不会再次调用
viewDidLoad

有两个相对简单的备选方案可供选择:

  • 视图中添加观察者将出现
    ,并在
    视图中将其删除
  • initXXX
    方法中添加观察者,并在
    dealoc
    中删除它

我可以在
viewDidLoad
中添加观察者,并在
direceivememorywarning
中删除它。但是,您必须在
direceivememorywarning
中“手动卸载”视图,以便以后再次调用
viewDidLoad
。例如,有关如何强制卸载视图的示例代码,请参见。

问题是您完全误解了
viewDidUnload
的含义<卸载视图时会调用code>viewDidUnload。在iOS 6之前的版本中,当您使用视图控制器时,其视图不会被卸载。在iOS 6之前的版本中,99%的时间您永远不会看到运行
viewDidUnload
,因为视图通常不会被卸载。在iOS 6之前的版本中,仅在内存警告时卸载视图,视图不可见。在iOS 6中,唯一的变化是视图从未卸载,即使在内存警告中也是如此

viewDidUnload
的行为在iOS 6之前版本和iOS 6中是相同的——在卸载视图时调用它。因此,您不必更改iOS 6的任何代码。如果你这样做了,你就做错了

在iOS 6之前,我曾在viewDidUnload方法中移除NSNotification的观察者

如果您的意思是在
viewDidLoad
中添加了观察者,则必须在
dealloc
中删除它。否则您的代码将崩溃。正如我上面所说的,在iOS 6之前的版本中,99%的时间都没有卸载视图。典型的流程是
init
->
viewDidLoad
->
dealloc
。视图不会在中间卸载。

您还可以选择在
viewDidUnload
中删除观察者。这是一个好主意,因为它会将其返回到加载视图之前的状态。但是,这并不是绝对必要的,因为当视图再次加载时,将调用
viewDidLoad
,并覆盖之前的任何状态


所以答案是,你不应该为了响应iOS 6而改变任何东西。无论您在
viewdiload
中做了什么,都应该在
viewdiload
(可选)和
dealloc
(必需)中撤消。这在iOS 6和iOS 6之前版本中都是如此。

问题是您完全误解了
viewDidUnload
的含义<卸载视图时会调用code>viewDidUnload。在iOS 6之前的版本中,当您使用视图控制器时,其视图不会被卸载。在iOS 6之前的版本中,99%的时间您永远不会看到运行
viewDidUnload
,因为视图通常不会被卸载。在iOS 6之前的版本中,仅在内存警告时卸载视图,视图不可见。在iOS 6中,唯一的变化是视图从未卸载,即使在内存警告中也是如此

viewDidUnload
的行为在iOS 6之前版本和iOS 6中是相同的——在卸载视图时调用它。因此,您不必更改iOS 6的任何代码。如果你这样做了,你就做错了

在iOS 6之前,我曾在viewDidUnload方法中移除NSNotification的观察者

如果您的意思是在
viewDidLoad
中添加了观察者,则必须在
dealloc
中删除它。否则您的代码将崩溃。正如我上面所说的,在iOS 6之前的版本中,99%的时间都没有卸载视图。典型的流程是
init
->
viewDidLoad
->
dealloc
。视图不会在中间卸载。

您还可以选择在
viewDidUnload
中删除观察者。这是一个好主意,因为它会将其返回到加载视图之前的状态。但是,这并不是绝对必要的,因为当视图再次加载时,将调用
viewDidLoad
,并覆盖之前的任何状态

所以答案是,你不应该为了响应iOS 6而改变任何东西。无论您在
viewdiload
中做了什么,都应该在
viewdiload
(可选)和
dealloc
(必需)中撤消。这两种情况都是如此