Jaka jest różnica między tym:
@property (nonatomic, weak) id <SubClassDelegate> delegate;
i to:
@property (nonatomic, assign) id <SubClassDelegate> delegate;
Chcę użyć właściwości dla delegatów.
Odpowiedzi:
Jedyna różnica między weak
i assign
polega na tym, że jeśli obiekt, na który weak
wskazuje właściwość, zostanie zwolniony, wówczas wartość weak
wskaźnika zostanie ustawiona na nil
, dzięki czemu nigdy nie ryzykujesz dostępu do śmieci. Jeśli użyjesz assign
, to się nie stanie, więc jeśli obiekt zostanie zwolniony spod ciebie i spróbujesz uzyskać do niego dostęp, uzyskasz dostęp do śmieci.
W przypadku obiektów Objective-C, jeśli jesteś w środowisku, w którym możesz użyć weak
, powinieneś go użyć.
UITableView
ma nawet assign
dla swojego delegata:@property (nonatomic, assign) id <UITableViewDelegate> delegate;