2011-09-06 81 views
0

我已經創建了一個使用靜態的NSSet來定義我的類的每個實例共享某些元素的類。可可釋放一個靜態變量

要定義這個瑟我用這個代碼:

myStaticSet = [[NSSet setWithObjects: 
         @"element one", 
         @"element two", 
         nil 
         ]retain]; 

正如你可以看到我保留集。

我真的不明白我在哪裏可以發佈myStaticVariable我敢肯定,我不能釋放它在dealloc ...那麼有沒有辦法釋放一個靜態變量?

//編輯 這可能是一個很好的解決方案增加了一類新方法來釋放靜態值?

+(void)cleanstatic{ 
    [mystatic release]; 
} 

當我確定我已經完成了這個課程時調用它?

回答

5

如果您正在使用一個靜態變量,想要釋放它,或許它不應該是畢竟靜態的?它是否在應用程序的整個生命週期中使用?在那種情況下,我會說你不必費心發佈它。

否則,如果你有使用這個變量的代碼一些常見的「終點」,這將是擺脫它的地方。

+0

謝謝你,你可以看看我的編輯? – MatterGoal

+0

當然,這是可能的,但是在例如多線程場景中很容易出錯。如果可能的話,我寧願推薦重構你的代碼,以便將它加入到一個實例變量中,然後你可以在完成時根據和釋放來處理它。有什麼特別的東西讓你想要釋放變量嗎?它有很多數據嗎? – lbergnehr

+0

它只需要20個字符串,但我正在尋找寫這段代碼的正確方法。我認爲爲這個類的每個實例創建20個字符串不是正確的方式,因此,我想採用靜態變量。那麼,在多線程場景中,這個實現會是一團糟? – MatterGoal

3

你不應該將其釋放。正如你所說,它是由你班級的每一個實例共享的,你永遠不能確定你不會創建新的實例。因此,只要您的應用程序正在運行,該設置就應該存在。