2015-04-28 65 views
0

我有两个视图,第二个视图是从第一个视图推送。对于测试,我从第一个视图进入第二个视图,然后回到第一个视图。之后,我发送通知,并在第二个视图中收到我的通知。popViewControllerAnimated:不从内存释放视图控制器

1)我可以知道为什么我会在弹出的第二个视图中收到通知吗?对于IBOutlets,我也宣布弱财产。 2)如果它仍然在内存中,对于像nsdictionary,nsstring这样的其他数据,我应该使用强还是弱的属性?那些还会在记忆中吗?

3)如果我不想在记忆中完全记住第二个视图,我该怎么办?

+0

在您的问题中显示相关的代码。你确定是否调用第二个视图控制器的'dealloc'方法吗?您是否注销通知? – rmaddy

+0

虽然我已经在第二个VC中使用了它。 https://github.com/danielamitay/DAKeyboardControl。我不太确定它会保留我的观点。 –

回答

-1

如果在“回”到第一个观点,那么你的第二个视图控制器不释放任何

  • 你是不是真的“回归” - 你不小心创建一个新的第一视图控制器推动它,这不太可能;或:

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

我打赌你有保留周期。你应该尝试追查下来。你提到通知:当设置一个视图控制器作为通知观察者时,创建一个意外的额外保留是非常容易的,所以这可能是原因。

特别,请参阅本主题的my book's discussion

  • 如果你叫addObserverForName:object:​queue:usingBlock:,你会泄漏(ARC下),除非采取周密的防范措施(如在块做弱强的舞蹈,以避免强烈保留self)。
+0

我很确定'addObserver:selector:name:object:'不保留观察者。我用了很多次,并从'dealloc'中调用它就好了。在我忘记删除观察者的情况下,如果发送通知并且释放的视图控制器仍然发送通知,则仍然调用“dealloc”,并且应用程序崩溃。 – rmaddy

+0

对不起,@rmaddy - 我像往常一样移动得太快 – matt

+0

谢谢你们。我会检查这些。 –

相关问题