2012-01-31 231 views
0

我是新來的Xcode 4.2,由於我的項目幾乎完成,我想我會嘗試一些蘋果提供的工具。所以,我跑Leak,顯然,它直接在應用程序啓動時發現泄漏。我得到的「泄漏」部分固體橙色豎線,當我調查,看來這是罪魁禍首:Autoreleasepool內存泄漏?

int main(int argc, char *argv[]) 
    { 
     @autoreleasepool { 
//problem appears on the line below in Orange 
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([TestProjectAppDelegate class])); 
     } 
    } 

由於我是新來這個,我不知道是什麼問題,如何解決它,或者即使我找到真正的問題!

(是不是有應該是一個「漏」打電話的地方?)

任何幫助將不勝感激。

編輯 鏈接截圖文件:http://whoit.home.comcast.net/~whoit/combined.jpg (太大嵌入)

+0

您是否試過鑽取儀器顯示屏? – Abizern 2012-01-31 16:27:06

+0

是的,但由於我是新手,對我來說這並不意味着什麼。 – wayneh 2012-01-31 16:39:14

+0

不幸的是 - 因爲我看不到你的屏幕 - 這對我來說也沒有任何意義。 – Abizern 2012-01-31 16:42:22

回答

2

點擊invert call tree在泄漏的選項窗格。

而且也,也許你可以添加截圖爲這種觀點如果可能的話:

Leaks

+0

已經這樣做了,但我不知道我在看什麼... – wayneh 2012-01-31 16:40:33

+0

您是否介意在添加屏幕截圖將這些呼叫樹擴大到泄漏? – ZhangChn 2012-01-31 16:51:04

+0

好吧,我剛剛添加了一個鏈接到我的原始文章的截圖圖像。謝謝。 – wayneh 2012-01-31 20:33:07

0

與此更換整個@autoreleasepool塊:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([TestProjectAppDelegate class])); 
[pool release]; 

return retVal; 

如果仍然出現相同的泄漏,那麼你的代碼中的其他地方就會出現過度保留問題,這一部分不是問題。如果你不是仍然看不到(不太可能),那麼這種新的語言結構可能會出現問題。極不可能的,但這是一個新的構造,所以肯定會有錯誤。

+0

不能這樣做 - 我正在使用ARC,編譯器抱怨你的代碼。 – wayneh 2012-01-31 22:15:59

+0

@wayneh - 啊,對,如果你使用ARC。泄漏工具也可能沒有完全更新以瞭解新的ARC系統,並且錯誤地報告泄漏。 – DougW 2012-01-31 22:53:48