2012-11-09 33 views
0

我完全喪失了內存錯誤。此問題僅在device上的happens而不是simulator。它也僅在應用程序第一次在設備上加載時發生。如果我關閉應用程序並重新啓動它,則問題不會預設。這是我得到的錯誤僅在設備上發送到已釋放實例的消息

-[CFString retain]: message sent to deallocated instance 0xfd5a2f0 

我試過一切,試圖找出發佈的字符串是什麼。請幫我弄清楚在設備上運行時釋放的對象是什麼,而不是模擬器!提前致謝!

更新: 我還沒有解決方案,但我已經確認該應用程序將崩潰在代碼行,我設置一個框架和上面的錯誤顯示一致。如果我將此代碼註釋掉,應用程序將通過這一點,但可能會在其他奇怪的地方崩潰。我甚至無法確定發生事故的原因。

CGRect frame = CGRectMake(27, 96, 265.0, 50.0); 
someAcct.frame = frame; 

我很困惑,因爲這不是一個字符串。有任何想法嗎?

更新2:此問題與正在同步的NSUser默認值直接相關。這似乎很隨機,但這是造成這個問題。任何幫助?

更新3:問題已在一週前解決。這實際上是由於字符串不可訪問。一個字符串被傳遞給一個方法,然後該方法工作並將數據傳遞給另一個方法等等。直到最後纔將數據寫入用戶默認值和包含在文檔文件夾中的本地plist。突然之間,應用程序會一直崩潰在上述非常奇怪的地方,即使這些地方與字符串無關。我很困惑,並且在玩了很長一段時間之後,我決定轉到.h文件並逐個檢查每個字符串,確保每個字符串都在.m文件中合成,並且應用self.stringName整個.m文件。花了一個小時後,我終於找到了應該責備的字符串,現在問題已經解決。使用self.stringName可以找到內存並避免這些模糊和高度混淆的應用程序崩潰。感謝大家提供的所有建議和提示!

+0

您應該在儀器中測試以找出內存泄漏 – SachinVsSachin

+0

您可以在我的啓用NSZombie中找到受影響的代碼部分並運行。找到代碼部分和帖子。這樣我們可以更好地幫助你。 :) –

+0

NSString意外發布...您需要設置屬性併合成字符串並與自己一起使用。 –

回答

0

問題是retaincount。請參考mememory management並檢查你是否沒有遺漏任何東西。

不要忘記打開onNSZombieEnabled。如果您的設備和仿真器都使用相同的iOS。嘗試工作在同一個版本的操作系統爲您的設備模擬器

+0

我已經啓用殭屍,但這個問題是如此晦澀我甚至不能開始計算問題來自何處。我可以發佈50頁的代碼。有什麼辦法可以設置一些東西,以便我可以確定實例號是什麼? – mejim707

+0

啓用殭屍將指示您找出崩潰的位置。試試看,這樣你可以從50頁的代碼中挑選出來。 :) –

+0

我還在爲此苦苦掙扎這麼多小時!我已經在Xcode中啓用了殭屍,但它並沒有顯示任何雙重釋放的對象。它只顯示應用程序崩潰時, 0x37314870:bkpt#207 0x37314872:blx 0x37342d68;符號存根:getpid 0x37314876:movs r1,#9 0x37314878:blx 0x37342e48;符號存根:kill 0x3731487c:movs r0,#0 0x3731487e:b 0x37314aae; ___forwarding___ + 710 *** - [CFString retain]:發送到解除分配實例0xa82a30的消息 它甚至沒有指向有問題的代碼。 – mejim707

0

的一個原因可能是由於iOS compatibility.Check並相應地改變字符串的release

1

爲了幫助你跟蹤它,你可以嘗試把NSLog放在你的didFinishLaunching()方法的開始,在didFinishLaunching()的中間某處。

那麼你也可以在應用程序顯示的第一個視圖控制器的viewDidLoad()中推送NSLog。例如,如果您使用標籤欄界面,那麼在第一個標籤的根視圖控制器中使用NSLog。您可以使用NSLog(@「step 1」),NSLog(@「step 2」),NSLog(@「step 3」)...來組織輸出,以便知道代碼設法到達的位置到崩潰前,而不是NSLog(@「我在這裏」)。

相關問題