在Objective-C,我知道,一個靜態變量(應該?)保持其價值的程序的生命週期。但是如果它存儲了一個指針,它在ARC中算作爲強?我可以依靠它,放心,這些實例將永遠去堆出來的,一旦我分配到一個靜態變量?靜態指針是一個強指針嗎?
static ClassA* shared;
-(id)init
{
if (self=[super init]) {
shared=self;
}
return self;
}
在Objective-C,我知道,一個靜態變量(應該?)保持其價值的程序的生命週期。但是如果它存儲了一個指針,它在ARC中算作爲強?我可以依靠它,放心,這些實例將永遠去堆出來的,一旦我分配到一個靜態變量?靜態指針是一個強指針嗎?
static ClassA* shared;
-(id)init
{
if (self=[super init]) {
shared=self;
}
return self;
}
是的,你可以依靠它,一旦它被分配。
的Transitioning to ARC Release Notes狀態:在ARC
,強是對象類型的缺省值。
然後:
__strong是默認的。只要有一個強有力的指針,一個對象仍然是「活着的」。
鑑於您的static
指針引用該對象,它將保持「活着」狀態。指針的作用域(無論是全局的,棧上的指針還是實例變量)都沒有區別。
實際上,我用這個靜態指針作爲一個全球性的指針爲我的項目的一部分,(我知道全局變量是邪惡的,但是......);如果它留在堆中,一旦我不再需要它,我怎麼能擺脫它?理想情況下,ARC應該照顧這一點,就好像沒有使用這個變量的代碼那麼它會得到處理;但隨後似乎這種靜態變量會搞亂了一切 – lynnard
@ yulan6248'nil'變量,當你不再需要它。 – JustSid