2014-12-03 8 views
6

Bunu UITableView'ın başlık dosyasında buldum ve projem ARC kullanıyor olsa da hemen hemen her özellik ark değil.Neden UITableView'ın temsilci özelliği özniteliği zayıf değil

Elma yerine assign ait weak özelliğini kullanmayan Neden
@property (nonatomic, assign) id <UITableViewDataSource> dataSource; 
@property (nonatomic, assign) id <UITableViewDelegate> delegate; 

, dışı yay için bir geriye dönük uyumluluk nedir? Eğer öyleyse, ARC'yi ve ARC'yi ayırt etmek için neden __has_feature(objc_arc)'u kullanmayın.

#if __has_feature(objc_arc) 
@property (nonatomic, weak) id <UITableViewDataSource> dataSource; 
@property (nonatomic, weak) id <UITableViewDelegate> delegate; 
#else 
@property (nonatomic, assign) id <UITableViewDataSource> dataSource; 
@property (nonatomic, assign) id <UITableViewDelegate> delegate; 
#endif 

ben temsilci örneği ayırmanın nil temsilci ayarlamak gerek kalmaz delegate zayıftır umuyoruz. Yardımlarınız için

teşekkürler.

Düzenleme:

benim dağıtım hedef 4.3 olduğunda ben ARC kullanabilirsiniz ama sonra weak kullanamazsınız çünkü __has_feature(objc_arc) yanlış olduğunu unutmayın. Dolayısıyla, dağıtım hedefimin 5.0 veya üstü olması şartı olmalıdır. Eğer atama var bir temsilci varken, her zaman nesne ayırmanın olacak her nil o temsilci değerini ayarlamak için çok önemli hale getirdiğini

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0 
@property (nonatomic, weak) id <UITableViewDataSource> dataSource; 
@property (nonatomic, weak) id <UITableViewDelegate> delegate; 
#else 
@property (nonatomic, assign) id <UITableViewDataSource> dataSource; 
@property (nonatomic, assign) id <UITableViewDelegate> delegate; 
#endif 
+0

Buradaki açıklamama bakın: http://stackoverflow.com/a/24469143/341994 "ARC olmayanlarla geriye dönük olarak uyumlu değil"; bu _is_ olmayan ARC. – matt

+0

@matt Çok teşekkür ederim. Eğer ARC destekli daha iyi bir Kakao sağlamak için '#if __IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_5_0' kullanarak Apple'ın daha iyi olacağını düşünüyor musunuz? Ya da bunu başarmak çok zor. – KudoCC

+1

Kakao'nun bu parçaları eskidir. Yakında hiçbir zaman değişmeyecekler. ARC'den uzun yıllar önceydi. Onlar oldukları gibi. Devam et. – matt

cevap

4

Neden Apple, atama yerine weak property kullanmıyor, bu ark için bir geriye dönük uyumluluk mu?

Bazı research and found'u yaptım, __weak “atama” değiştiricisine eş anlamlıdır. Ancak tek fark, temsilci devresi örneğinde, tahsis edildiğinde sıfır olarak ayarlanmaz. Normalde IBOutlets ve delegeler için atama değiştirici kullanırsınız. ARC altında, bu __weak ile değiştirilir. Ancak, bir uyarı var. __weak, uygulamayı sıfır zayıf referansları destekleyen bir çalışma zamanına dağıtmanızı gerektirir. Buna,> = (iOS 5 ve Lion) dahildir. Snow Leopard veya iOS 4 ve daha eski işletim sistemleri sıfır referanslı zayıf referansları desteklemez. Bu, eski işletim sistemlerine dağıtmayı planlıyorsanız, __weak sahiplik değiştiricilerini kullanamayacağınız anlamına gelir. Evet, bu hassaslıkta ark olmayanlar için geriye dönük bir uyumluluk.

+0

__weak, düzenleyici atamak için eşanlamlı olduğunu söylüyorsunuz, ancak atama kullandığımda, temsilci örneği ayrıldıktan sonra temsilci, __weak değiştiricisinin yaptığı gibi sıfırlanmayacaktır. – KudoCC

+0

Evet efendim bu doğru. Güncelleme yaptınız, bağlantıyı ve açıklamayı takip ettiniz mi? Sebebini çözeceksin. –

+0

Teşekkürler, bağlantıyı daha sonra göreceğim :) – KudoCC

0

Not - öylesine bir nesne daima nil dışarı temsilci için dikkatli olmalıdır Başka yerde yapmadıysa, dealloc'taki referanslar. Bunu kullanmaya çalışırsanız bir kazaya sebep dolayısıyla ve -

Böylece temsilci, herhangi bir referans sol set atama, bir nesne (artık beklenen maddenin cinsine ayrılan belleğe işaret) ayırmanın sonra geçersiz olacaktır. Hata ayıklayıcısında bunun bir belirtisi, hata ayıklayıcının bir değişkenin, değişkenin gerçekte bildirildiği gibi tamamen yanlış görünen bir türe sahip olduğunu iddia etmesidir.

Bu

çok nedeni

Umut “ zayıf UITableView en temsilci özelliğinin nitelik değildir Neden” bu size yardımcı olabilir olabilir.

İlgili konular