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];
}
這兩個片段之間有什麼區別?我也很困惑。 – 2012-01-30 19:37:40
如果你嘗試'test = [[NSDate distantPast] copy]'而不是?相同的所有權,但不同的路線。 – dreamlax 2012-01-30 19:43:21
@Vince和Abizern。我糾正了片段。他們確實是一樣的。 – Twilite 2012-01-30 19:44:13