Znalazłem to w pliku nagłówkowym UITableView i prawie każda właściwość ma styl inny niż łuk, chociaż mój projekt używa ARC.Dlaczego atrybut atrybutu właściwości delegata UITableView nie jest słaby?
@property (nonatomic, assign) id <UITableViewDataSource> dataSource;
@property (nonatomic, assign) id <UITableViewDelegate> delegate;
Dlaczego Apple nie należy używać weak
własność zamiast assign
, jest to wsteczna kompatybilność dla non-łuku? Jeśli tak, to dlaczego nie używać __has_feature(objc_arc)
, aby odróżnić ARC od ARC.
#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
Mam nadzieję delegate
jest słaby, więc nie trzeba ustawić delegata do zera, gdy instancja delegata jest zwalniane.
Dzięki za pomoc.
Edit:
Pragnę zauważyć, że __has_feature(objc_arc)
jest błędne, ponieważ mogę używać ARC kiedy mój cel wdrażania jest 4.3, ale wtedy nie mogę korzystać weak
. Tak więc warunek powinien być taki, czy mój cel wdrożenia jest równy 5,0 lub wyższy.
#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
Zobacz moje wyjaśnienie tutaj: http://stackoverflow.com/a/24469143/341994 Nie jest "kompatybilny wstecz z non-ARC"; to nie jest ARC. – matt
@matt Dziękuję bardzo. Czy uważasz, że lepiej jest, jeśli Apple używa '#if __IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_5_0', aby zapewnić lepszą obsługę Cocoa z ARC? Lub bardzo trudno to osiągnąć. – KudoCC
Te części kakao są stare. W najbliższym czasie się nie zmienią. Poprzedzają ARC od wielu lat. Są jakie są. Pójść dalej. – matt