※ 引述《boy19931118 (boy19931118)》之銘言:
: 我有一個Navigation
: A寫了自定義Button Push View B
: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
: bundle: nil];
: LocationWebView *lvc = [storyboard
: instantiateViewControllerWithIdentifier:@"LocationWebView"];
: [self.navigationController pushViewController:lvc animated:YES];
: 程式碼大概是這樣 因為MAC暫時不在身邊 無法拿自己的程式碼
: 而B也寫了一個返回Button
: [[self navigationController] popViewControllerAnimated:YES];
: 但是返回A後 B的內存並沒有被釋放 所以只要不停的A>B>A>B>A>B
: 使用記憶體就會持續上升
: 希望能指點一下
你可能先確定是不是 B 沒有被釋放,記憶體上升有很多種原因,
不見得是 B 造成的。你可以試試看在 B class 中先寫一個空的 dealloc
然後在 dealloc 的地方打一個 break point,看看是否真的沒有呼叫到。
如果 B 真的沒有被釋放,就是有別的地方 retain 了 B。常見
有幾種可能:
1. 是不是 A 還有其他 property 指向 B?
2. B 有沒有哪些 property 是 block,而 block 裡頭呼叫了 self?
3. B 裡頭有沒有 timer 物件的 target 是 self,而在離開 B
的時候沒有停止 timer?timer 的 target 會被 timer
retain 一份,而如果 view controller 有 timer 的話,
我們就不該把 invalidate timer 寫在 dealloc 的地方,而是
要寫在 viewDidDisappear 之類的地方。
: 問題二