Ho passato il mio progetto a ARC e non capisco se devo usare strong
o weak
per IBOutlets. Xcode fare questo: nel costruttore di interfaccia, se un creare un UILabel
per esempio, e lo collego con assistente al montaggio alla mia ViewController
, è creare questo:debole o forte per IBOutlet e altri
@property (nonatomic, strong) UILabel *aLabel;
utilizza il strong
, invece ho letto un tutorial sul sito RayWenderlich che dica questo:
Ma per queste due proprietà particolari ho altri piani. Invece di
strong
, li dichiareremo comeweak
.
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) IBOutlet UISearchBar *searchBar;
Weak
è il rapporto raccomandato per tutti uscita proprietà. Questi oggetti di vista sono già parte della gerarchia della vista del controllore di vista e non devono essere conservati altrove. Il grande vantaggio di dichiarare i tuoi punti venditaweak
è che ti fa risparmiare tempo scrivendo il metodo viewDidUnload .Attualmente il nostro
viewDidUnload
assomiglia a questo:
- (void)viewDidUnload
{
[super viewDidUnload];
self.tableView = nil;
self.searchBar = nil;
soundEffect = nil;
}
È ora possibile semplificare al seguente:
- (void)viewDidUnload
{
[super viewDidUnload];
soundEffect = nil;
}
Quindi utilizzare weak
, al posto del strong
, e rimuovere il set su nil nel videDidUnload
, invece Xcode usa th e strong
e utilizzare self... = nil
nello viewDidUnload
.
La mia domanda è: quando devo usare strong
e quando weak
? Voglio anche utilizzarlo per l'obiettivo di distribuzione iOS 4, quindi quando devo usare lo unsafe_unretain
? Chiunque può aiutarmi a spiegarmi bene con un piccolo tutorial, quando usi strong
, weak
e unsafe_unretain
con ARC?
grazie per la risposta – Piero
tu dici che, per iboutlet se uso strong devo usare nil in viewdidunload, e per memoria bassa non ho perdite, invece con weak non devo usare nil in videwdidunlaod, e per memoria bassa avviso è meglio la soluzione forte o il debole? – Piero
È lo stesso. L'uso di 'weak' ti consente di risparmiare tempo scrivendo a mano il codice (due righe nel tuo caso). Ma Xcode lo fa per te. La mia opinione personale Mi piace usare 'forte'. –