2015-08-18 5 views
1

Я нашел то, что не могу понять в файле заголовка UICollectionView. Я обнаружил, что делегат имеет присвойте свойствоСвойство делегата класса UICollectionView

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

Этот вопрос предназначен только для моего базового понимания, как правило, говорит делегат должен иметь слабое свойство. И, согласно моим личным данным, присваивание не будет ссылаться на счет объекта делегата, но при этом объект будет освобожден от ссылки на значение мусора. Может кто-нибудь помочь мне понять этот кусок кода? Большое спасибо!

ответ

3

strong и weak были представлены вместе с Automatic Reference Counting (ARC). UIKit moved to ARC with iOS 9, и если вы посмотрите на заголовок iOS 9 (используя Xcode 7), вы увидите, что это свойство теперь weak.

Вы правы: со свойством как assign (что эквивалентно unsafe_unretained), если делегат высвобождены в то время как вид коллекции жив, вид коллекции delegate свойство будет указывать, где перераспределена объект, используемый, чтобы быть и, вероятно, вызывают сбои, когда на них ссылаются. Это не обычно проблема, потому что делегат часто контроллер вида, владеющий коллекционным представлением, поэтому обычно переживает вид. Однако это не гарантия, поэтому вы должны установить assign делегатов, которые указывают вам на nil в вашем dealloc.

Соответствующие Stack Overflow вопросы:

+0

Ну, я убежден. :) Это было немного нелогично для меня. –