2013-05-31 58 views
0

如果您使用Xcode開發iOS應用程序並在不同設備上進行測試,那麼爲什麼它會採取不同的行爲,因爲這些設備是相同的型號並且具有相同的軟件版本?爲什麼iOS應用程序在兩個不同設備上的行爲不同?

例如,我最近一直在研究一個應用程序。該應用程序的一個乾淨的版本被放在兩個不同的iPhone5上。在手機上的一個運行(相同的軟件版本)

但是同時我會得到類似下面這樣的內存釋放錯誤:

*** -[CFString release]: message sent to deallocated instance

凡爲其他設備上,沒有這樣的錯誤會出現。

是否有任何明顯的原因,爲什麼這可能是任何應用程序的情況?

+1

哪個字符串被釋放?郵政編碼以便我們更好地理解。 – jxpx777

+0

問題的一部分是,我實際上並不知道發生了什麼,或者字符串在哪裏被釋放。這很奇怪。 –

+1

您是否嘗試過在所有異常情況下設置斷點? – codingFriend1

回答

0

您的代碼在不同的設備上的行爲可能不同。該問題很可能存在於所有設備上,但在某些情況下只會導致問題。您無法預測autorelease池中的對象何時會被釋放,但您可以確定它並不總是以相同的時間進行分配。在不同的設備上運行,由於其他後臺進程,內存使用情況等原因,自動釋放池的耗盡時間可能會有所不同。

您看到的釋放錯誤很可能是由於您在一個電話上執行的release調用自動釋放的對象,你沒有自己調用retain。請檢查您的代碼是否創建了沒有init調用的對象,但您要撥打的號碼是release。此外,請嘗試使用啓用殭屍對象的儀器運行您的代碼,以查看是否可以找到造成問題的NSString對象。

0

您的字符串被保留或釋放。當您嘗試訪問釋放的對象時,會發生此問題。可能是你的字符串在你訪問它之前被釋放。我面對這個問題。

使用殭屍模板在樂器中運行您的應用程序。這會告訴你什麼對象有內存問題,並會讓你看到該對象的整個保留/釋放歷史記錄。這應該指向正確的方向。

殭屍使

option+cmnd+r 

然後選擇Enable Zombie Objects然後Run

+1

與此相關的一個問題是,使用模擬器運行應用程序不會由於某種原因觸發此錯誤。我可以在實際設備上運行應用程序時使用殭屍模板嗎?我從來沒有這樣做過。 –

+2

是的,你可以啓用,如果你有開發人員配置。 –

+0

爲了做到這一點,我只需將其附加到特定過程? –

相關問題