以下代碼來自Big Nerd Ranch iOS編程手冊第3版。它是一個類方法,用於檢查單例類BNRItemStore是否已被實例化。如果有,它將返回單例實例,如果它沒有創建它。我不明白的部分是靜態變量。我知道靜態變量保持狀態,但是,不會再次調用該方法將* sharedStore重置爲nil?即一旦該方法被再次調用,這不是一個將刪除單例實例的創建的分配嗎?爲什麼不設置一個靜態變量來消除靜態變量的目的?
static BNRItemStore *sharedStore = nil;
方法
+(BNRItemStore *)sharedStore
{
static BNRItemStore *sharedStore = nil;
if (!sharedStore)
sharedStore = [[ super allocWithZone:nil ] init ];
return sharedStore;
}
這是C的「靜態」實現的一個奇怪點:不管靜態變量在哪裏聲明,在聲明語句**中發生的任何初始化**都只執行一次。 –