2011-10-14 29 views
14

ARC'nin nasıl çalıştığı konusunda biraz kafam karışmış, otomatik referans sayımı olduğunu biliyorum, ancak bu işlevsellik işlenmemiş değişkenleri atamak için bile çalışıyor (özellikleri kullanmıyor). ÖrneğiniOS 5 Örnek değişkenler

, ben bir örnek değişkeni arr varsa:

@interface TestClass : NSObject { 
    NSArray *arr; 
} 

Şimdi bir kullanarak bu atama bir yöntem içinde NSArray auto-bırakması durumunda: Bu diziye ne olur

- (IBAction)test { 
    arr = [NSArray arrayWithObject:@"TEST"]; 
} 

? arr başka bir şeye yeniden atanıncaya kadar onu sihirli bir şekilde saklıyor mu? güçlü vs zayıfsa ne olur

self.arr = [NSArray arrayWithObject:@"TEST"]; 

:

Şimdi böyle bir şey yaparsam?

+3

Apple'ın Transitionsing'ini ARC Release Notes belgesine okumanızı tavsiye ederim. – ditkin

+0

Ve kolaylık sağlamak için: http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html –

cevap

18

Evet, ARC ham ivar erişimi üzerinde çalışıyor. Yerel değişkenler gibi, ivarlar __weak veya __unsafe_unretained ile dekore edilmedikçe örtük olarak __strong'dur. Bu nedenle, varsayılan olarak, strong (veya ARC'nin strong ile eşanlamlı olduğu retain) işaretli bir özellik gibi davranacaktır.

+0

Kevin, bir '@ synthesize'd özelliği ile 'copy' semantiği ile ne olur? sentezlenmiş ivar'a doğrudan erişirsiniz. Derleyici bir "kopya" ekler mi? –

+0

@StevenKramer: Hayır. Doğrudan ivar'lara erişme * her zaman *, mülkün bellek yönetimi semantiğini yok sayar. Önemli olan tek zaman sentezlenmiş bir ivar, sentezlendiği mülkün zayıf/güçlü semantiğini alacaktır.) –

+0

Bilgi için teşekkürler Kevin. Sadece bunu hata ayıklayıcısında doğruladım. Sanırım biraz garip ama anlaşılabilir bir seçim. –