我經常看到單班設計類似以下內容:iPhone SDK:當分配一個靜態變量時,我應該檢查零嗎?
@implementation SomeImplementation
static SomeClass *sharedSomeObject = nil;
+ (void) someClassMethod {
sharedSomeObject = [[SomeImplementation alloc] init];
// do something
}
@end
someClassMethod可以在任何時候被調用 - 它應該被檢查零第一分配sharedSomeObject的新實例之前?或者,由於sharedSomeObject是靜態的,檢查是否不必要?看到這樣的代碼,我總是希望在分配周圍放置一個if(!sharedSomeObject)。
請注意,函數靜態聲明是故意的。它有助於保持代碼清潔並僅將可見性降低到+共享方法。通過這樣做,您還可以在任何地方重複使用名稱「sSingleton」。沒有命名空間污染。 – par 2011-01-13 04:17:50
我還會指出,如果以上代碼實現爲as-is,則每次調用someClassMethod時會泄漏先前的sharedSomeObject實例。確認! – par 2011-01-13 04:20:01