2013-01-22 35 views
9

Amaç-c, statik bir değişkenin (olmalıdır?), Programın ömrü boyunca değerini koruduğunu biliyorum. Ancak bir işaretçi depolarsa, ARC'de güçlü olarak sayılır mı? Buna bağlı olabilir ve bu örneğin statik bir değişkene atandığımda 'un hiçbir zaman yığınının dışına çıkmayacağından emin olabilir miyim?Statik işaretçi güçlü bir işaretçi midir?

static ClassA* shared; 

-(id)init 
{ 
    if (self=[super init]) { 
     shared=self; 
    } 
    return self; 
} 

cevap

14

Evet, atadıktan sonra ona güvenebilirsiniz.

Transitioning to ARC Release Notes durumu:

altında ARC, güçlü nesne türleri için varsayılan olduğunu.

ve sonra:

__strong varsayılan değerdir. Bir nesne, ona güçlü bir işaretçi olduğu sürece “canlı” kalır.

static işaretçiniz göz önüne alındığında, nesne "canlı" olarak kalacaktır. Bir işaretçinin kapsamı (ister global, ister yığındaki bir işaretçi veya bir örnek değişken) fark yaratmaz.

+0

Aslında bu statik göstergeyi projemin bir parçası için global bir işaretçi olarak kullanıyorum (global değişkenin kötülük olduğunu biliyorum, ama ...); eğer yığın içinde kalırsa, artık istemediğim zaman nasıl kurtulabilirim? İdeal olarak, bu değişkeni kullanan bir kod yokmuşçasına ARC'nin dikkat etmesi gerekir; ama o zaman bu statik değişkenin, artık ihtiyacınız olduğunda değişkeni olan – lynnard

+0

@ yulan6248 'nil' herşeyi dağıtacağı anlaşılıyor. – JustSid

0

Sadece bir Singleton uygulamalısınız gibi görünüyor ve sonra örneği nil olarak ayarlayarak kurtulmak olabilir.

+0

Ama eğer statik işaretçi güçlü ise, bu sadece singleton sınıfında kendimden geçebileceğim anlamına gelmez mi? Bu yüzden buna adanmış bir yöntem yapmalıyım. – lynnard

+0

ARC'yi kullanıyorsanız koleksiyon hakkında gerçekten umurunda değilsiniz. Eğer boşalırsan, kullandığı bellek geri kazanılacak, değil mi? – Rob

+1

Sanırım kafam karıştı. Eğer statik değişken güçlü bir işaretçiyse, o zaman ARC'nin doğru bir şekilde ayrılmasına izin vermemesi gerekiyor. ama statik değişken sadece tekil sınıfına göründüğü için, onu tekil sınıfının içinde bırakmak zorundayım ... Yoksa yanılıyor muyum? – lynnard