popViewControllerAnimated:不从内存中释放视图控制器

popViewControllerAnimated: doesn't release view controller from memory

我有两个视图,第二个视图是从第一个视图推入的。为了测试,我从第一个视图转到第二个视图,然后返回到第一个视图。之后,我发送 nsnotification,在我的第二个视图中,它收到我的通知。

1)请问为什么弹出通知后在第二个视图中收到通知?对于 IBOutlets,我也声明 weak 属性。

2) 如果还在内存中,对于nsdictionary、nsstring等其他数据,我应该使用strong还是weak 属性?请问那些也在记忆中吗?

3)如果我不想让我的第二个视图完全在内存中,我该怎么办?

如果当你"go back"到第一个视图时你的第二个视图控制器没有被释放,那么要么

  • 你不是真的 "going back" - 你不小心创建了一个新的第一个视图控制器并推送它,这不太可能;或者:

  • 您的第二个视图控制器中有一个保留周期。

我打赌你确实有一个保留周期。你应该试着追踪这个。您提到了通知:在将视图控制器设置为通知观察器时很容易创建意外的额外保留,所以这可能是原因。

具体见本主题my book's discussion

  • 如果你调用 addObserverForName:object:​queue:usingBlock:,你将泄漏(在 ARC 下)除非采取精心的预防措施(例如在块中进行弱-强舞蹈,以避免强烈保留 self)。