L'ho trovato nel file di intestazione di UITableView e quasi tutte le proprietà sono in stile non arc sebbene il mio progetto stia utilizzando ARC.Perché l'attributo della proprietà delegato di UITableView è debole
@property (nonatomic, assign) id <UITableViewDataSource> dataSource;
@property (nonatomic, assign) id <UITableViewDelegate> delegate;
Perché Apple non utilizzare weak
proprietà invece di assign
, si tratta di una retrocompatibilità per i non-arc? In tal caso, perché non utilizzare __has_feature(objc_arc)
per distinguere ARC e non 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
spero delegate
è debole quindi non ho bisogno di impostare il delegato a zero quando l'istanza delegato viene deallocato.
Grazie per il vostro aiuto.
Edit:
faccio notare che __has_feature(objc_arc)
è sbagliato, perché posso usare ARC quando la mia destinazione di distribuzione è 4,3, ma d'altra parte non posso usare weak
. Quindi la condizione dovrebbe essere se il mio obiettivo di distribuzione è uguale a 5.0 o superiore.
#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
Vedere la mia spiegazione qui: http://stackoverflow.com/a/24469143/341994 Non è "retrocompatibile con non ARC"; è _ non_ ARC. – matt
@matt Grazie mille. Pensi che sia meglio se Apple utilizzi '#if __IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_5_0' per fornire un Cocoa migliore con ARC supportato? O è molto difficile riuscirci. – KudoCC
Queste parti di cacao sono vecchie. Non cambieranno presto. Precedono l'ARC di molti anni. Sono quello che sono. Vai avanti. – matt