2015-06-28 46 views
0

試圖找出我們間歇性遇到的問題,這似乎是發生在低內存條件的設備上。可疑的原因是NSDateFormatter單身人士是零。這個dispatch_once單例可以返回零嗎?

有什麼可能的情況下,單身模式可以返回零嗎?

+ (NSDateFormatter *)dateFormatterUTC { 

    static NSDateFormatter *formatter; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     formatter = [[NSDateFormatter alloc] init]; 
     [email protected]"yyyy-MM-dd HH:mm:ss ZZZ"; 
    }); 

    return formatter; 
} 
+0

據我所知沒有,我單會留在生命週期,但日期格式可以返回一個零日期,如果它不能正確解析日期格式 – Andrea

+0

一般而言,我會說不,但沒有任何強制執行的保證,分配將返回非零,所以,你知道,它是*可能* ...但在實踐中沒有。 – ipmcc

回答

1

如果你沒有做一些奇怪的事,那麼不需要。

有兩種情況如何,這可能返回nil:

  1. 的頁頭或init方法instanciating日期格式時返回nil。如果沒有可用的堆內存,則可能會發生這種情況。但在這種情況下,您的程序很可能會崩潰。大多數Objective-C代碼(可能包括Apple框架)是在假設堆內存不能用完的情況下編寫的。

  2. 有人用nil覆蓋了靜態指針,但保留了onceToken。這不太可能偶然發生,但並非不可能。像這樣的內存損壞錯誤可能會打破其他事情,並使應用程序崩潰。

因此,對於所有的實際目的,你可以假設你的函數總是會返回一個有效的對象。如果你真的想確保你可以在你返回之前添加一個斷言。

相關問題