Temsilci özellik bildiriminde 'zayıf' ve 'atama' arasındaki fark nedir


87

Bunun arasındaki fark nedir:

@property (nonatomic, weak) id  <SubClassDelegate> delegate; 

ve bu:

@property (nonatomic, assign) id  <SubClassDelegate> delegate; 

Temsilciler için mülk kullanmak istiyorum.

Yanıtlar:


153

Arasındaki tek fark weakve assignnesne eğer ki weakmülkiyet noktaları ayırmanın, sonra değeri weakpointer ayarlanacak nilsen çöp erişen riskiyle asla böylece. Eğer kullanırsanız assign, bu nesne, altından ayırmanın alır eğer öyleyse, olmayacak ve sen, çöp erişecek erişmeye deneyin.

Objective-C nesneleri için, kullanabileceğiniz bir ortamdaysanız weak, o zaman kullanmalısınız.


16
Bazı Cocoa Touch çerçeve sınıflarının neden hala delegeler için atama kullandığını biliyor musunuz? Örneğin, UISearchDisplayController temsilcisi hala atanmıştır . Neden hiç güncellenmedi?
Pwner

@Pwner, iOS 8.0'da kullanımdan kaldırılmış gibi görünüyor
Stavash

İşte kullanımdan kaldırılmamış bir örnek: temsilcisi için bile UITableViewvar assign:@property (nonatomic, assign) id <UITableViewDelegate> delegate;
Chris Nolet

3
@ChrisNolet Çünkü muhtemelen dahili olarak hala MRC (Manuel Referans Sayma) kullanıyorlar.
Marco Sero

2
Bugün itibariyle, UITableView temsilcisinin örneği şu şekildedir: @property (nonatomic, zayıf, nullable) id <UITableViewDelegate> delegate; Yani bu artık geçerli bir örnek değil.
sdoowhsoj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.