2012-01-30 58 views
1

在應用程序中我寫,保留在[NSDate的distantPast] ...崩潰有時

 NSDate *test = [NSDate distantPast]; 
     [test retain]; // crashes with EXC_BAD_ACCESS 

崩潰幾乎每上保留的時間,而

 NSDate *test = [NSDate date]; 
     [test retain]; 

也從來沒有。

我很疑惑爲什麼。這段代碼通過UI操作在主線程上調用,我在調試器的IOS模擬器中運行它。有時它不會崩潰。可能是一個併發問題?有沒有一個明顯的問題,我錯過了,或者我應該嘗試修剪我的應用程序,直到它的工作?

UPDATE:

 NSDate *test = [[NSDate distantPast] copy]; 

崩潰爲好,而

 NSDate *test = [[NSDate date] copy]; 

沒有。清理構建並重新啓動IOS模擬器也沒有幫助。

更新2:

調用片段中application:didFinishLaunchingWithOptions不會崩潰。我的應用程序必須做一些混亂的系統。當我發現什麼時,我會發布答案。

更新3(解決):

出錯行某處在我的應用程序完全不同:

WRONG:

- (id)init 
{ 
    lastUpdate = [NSDate distantPast]; 
} 

distantPast的情況下被執行後葉自動釋放init代碼塊。我應該保留它來抵制autorelease。

正確的:

- (id)init 
{ 
    lastUpdate = [[NSDate distantPast] retain]; 
} 
+0

這兩個片段之間有什麼區別?我也很困惑。 – 2012-01-30 19:37:40

+0

如果你嘗試'test = [[NSDate distantPast] copy]'而不是?相同的所有權,但不同的路線。 – dreamlax 2012-01-30 19:43:21

+0

@Vince和Abizern。我糾正了片段。他們確實是一樣的。 – Twilite 2012-01-30 19:44:13

回答

4

簡介您的應用程序與 「植物大戰殭屍」 的儀器。當它崩潰時,您應該能夠看到流氓對象的完整保留/釋放歷史記錄,並從該數字中看出哪裏出了問題。