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