2010-07-23 71 views
0

我已經變窄的內存泄漏問題降低到這個代碼特定塊:核心數據奇怪泄漏上設備,但是不能模擬器

NSFetchRequest *req = [NSFetchRequest new]; 
NSEntityDescription *descr = [NSEntityDescription entityForName:@"Capture" inManagedObjectContext:dataContext]; 
[req setEntity:descr]; 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"created_at" ascending:NO]; 
[req setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 
NSError *error; 
NSArray *ret = [dataContext executeFetchRequest:req error:&error]; 
[req release]; 

該塊在任一視圖控制器的一個或init方法viewDidLoad存在導航控制器中的一兩層。

在哪裏我很困惑,不知道該怎麼做是我得到的內存使用此代碼有關CoreGraphicsFoundation泄漏,甚至JavaScript Core,但我不知道該如何糾正問題(不知道是什麼問題是)。只有在Device安裝時運行Instruments而不是Simulator時纔會發生這種情況。

[這不會讓我張貼儀器的照片,所以這裏的照片:http://twitpic.com/27vwm1]

通過方式的背景下,用我的核心數據模型有舉行轉化UIImage的屬性,但我自從將它轉換爲NSNumber並重建了我的項目的對象類。這可能與它有什麼關係嗎?在改變我的模型時,我需要採取另一個步驟嗎?

THX

**更新:**改變URL的圖片

+0

您的鏈接顯示空白頁面,甚至沒有源代碼。 – TechZen 2010-07-23 15:10:33

+0

很奇怪。我改變了鏈接,現在試試。 – Jeof 2010-07-23 16:21:39

+0

好吧,現在它工作。 – TechZen 2010-07-24 13:30:27

回答

1

如果碰到在儀器底部面板上的信號源按鈕和源文件拖放到它,它會告訴你在該行你的代碼在哪裏認爲泄漏是。如果應用程序正在運行,可以複製出的調試器和這樣的對象的地址:

po 0x1a831 

...,它會在該地址打印對象的描述。

最有可能的,你的泄漏是從獲取管理對象的副作用產生。值轉換器是這種泄漏的常見來源,因爲它們每次使用時都會創建對象。我會查看被管理對象的子類本身的泄漏源。

+0

我對處理記憶問題有點新,所以我在這裏爲任何無知道歉。但是我到底能在儀器的底部面板中找到Source按鈕?在擴展細節中,我找到了一個源位置選項,但它沒有顯示我的任何代碼 - 就好像所有的泄漏都在默認框架中一樣。 另外 - 我不再在我的託管對象/核心數據中使用值轉換,並且目標文件非常簡單且默認。我是否錯過了從變形金剛轉變而來的一步 - 是緩存還是某種奇怪的東西? – Jeof 2010-07-24 15:46:34

+0

哎呀,我不確定。我剛剛檢查過,並且Xcode 3.2.3附帶的新版本與以前的版本有不同的界面,而與Instrument用戶指南中的不同。它曾經是在細節視圖的底部,但那些按鈕不在那裏了。 – TechZen 2010-07-24 23:38:43

+0

以下是它如何工作http://stackoverflow.com/questions/1634067/iphone-analyzing-leaks-with-instruments/1639237#1639237 – TechZen 2010-07-24 23:42:36

0

我在另一個應用程序有我的應用程序類似的問題,和一個朋友了。我們已經檢查並重新檢查了我們的代碼,並且我們身邊沒有任何問題(我們正在做與蘋果示例代碼相同的基本事項)。

似乎使用核心數據的設備時,不會在模擬器上發生有討厭的副作用。

我已經花了關於這個問題了大量的時間,我在該點的問題確實是對蘋果的框架,而不是我的代碼。我認爲爲這個問題提交一個錯誤報告是一個好主意。

注:我有這個問題,使用內部消除任何自定義或變形的物體,只有串在我的被管理對象的屬性。

0

同意,同樣的問題在這裏。 即使您只是使用嚮導生成的代碼,並將其分割視圖和核心數據泄露! 我花了一段時間才發現這一點。我在應用程序上寫了大量代碼,當準備好開始泄漏測試時,無法找到泄漏的來源,因爲儀器在我的代碼中沒有提到任何內容。我嚴重地出現了和你一樣的症狀。 因此,在評論我的代碼幾天後,我決定啓動splitview的模板項目,勾選核心數據,而不是自己添加任何代碼。 猜猜看是什麼?同樣的該死的泄漏。它只發生在應用程序啓動時,只有當你使用應用程序添加項目。我很驚訝,蘋果公司至少已經修復了這個問題,或者至少提到了一個解決方法。 我是唯一一個使用核心數據與Splitview?