Friday, May 27, 2011

iOS 開發日誌:memory leak at navigation pushing control

一直覺得 XCode 提供的 Instrument tool 很方便,習慣都會在 milestone build 做個 memory leak 檢查。

昨天卻發生了 memory leak 在 UIKit 裡面的現象

        IssueViewController *nextController = [[IssueViewController alloc] init];
        [self.navigationController pushViewController:nextController animated:YES];
        [self.navigationController setNavigationBarHidden:YES animated:YES];
        [nextController release];

Code 很標準,但是 Instrument 卻回報在 pushViewController 發生了 memory leak,不管在 simulator 或是實機都一樣。

翻翻 Google,看到很多人有過這種經驗,但是並沒有一致的原因,多半還都是沒有 solution。

在使用 Heap spot 也看不出問題的情形下,只好用最笨的隔離法測試,結果終於找到問題點了!

問題出在 pushViewController 的下一行

        [self.navigationController setNavigationBarHidden:YES animated:YES];

原來在 push 後若是再對自己的 navigationController 動作,對導致 reference count 的增加,變成 memory leak...

移掉這行就 ok 了。

這情形不好抓,只好寫篇記錄~

No comments: