我有两个视图,第二个视图是从第一个视图推送的。为了进行测试,我从第一个视图转到第二个视图,然后返回到第一个视图。之后,我发送 ns通知,在我的第二个视图中,它收到我的通知。
1)我可以知道为什么弹出后我在第二个视图中收到通知吗?对于IBOutlets,我也声明弱属性。
2)如果它仍在内存中,对于其他数据,如nsdictionary,nsstring,我应该使用强属性还是弱属性?那些也会在记忆中吗?
3)如果我不想完全记住我的第二个视图,我该怎么办?
如果在"返回"第一个视图时未释放第二个视图控制器,则
- 你
并没有真正"回去"——你不小心创建了一个新的第一视图控制器并推动它,这不太可能;或者:
第二个视图控制器中有一个保留周期。
我敢打赌你确实有一个保留周期。您应该尝试追踪这一点。您提到了通知:将视图控制器设置为通知观察者时,很容易创建意外的额外保留,因此这可能是原因。
特别是,请参阅我的书中对这个主题的讨论:
- 如果您调用
addObserverForName:object:queue:usingBlock:
,您将泄漏(在 ARC 下),除非采取周密的预防措施(例如在块中进行弱强舞蹈,以避免强烈保留self
)。