IBOutlet
dovrebbe essere forte, per motivi di prestazioni. Vedi Storyboard Reference, Strong IBOutlet, Scene Dock in iOS 9
Come spiegato in questo paragrafo, gli sbocchi per le visualizzazioni secondarie della vista del controller di visualizzazione possono essere deboli, poiché tali visualizzazioni secondarie sono già di proprietà dell'oggetto di livello superiore del file pennino. Tuttavia, quando un Outlet è definito come un puntatore debole e il puntatore è impostato, ARC chiama la funzione di runtime:
id objc_storeWeak(id *object, id value);
Ciò aggiunge il puntatore (oggetto) a una tabella usando il valore dell'oggetto come chiave. Questa tabella viene definita tabella debole. ARC utilizza questa tabella per archiviare tutti i puntatori deboli dell'applicazione. Ora, quando il valore dell'oggetto è deallocato, ARC ripeterà la tabella debole e imposterà il riferimento debole su zero. In alternativa, ARC può chiamare:
void objc_destroyWeak(id * object)
Quindi, l'oggetto non è registrato e objc_destroyWeak chiama di nuovo:
objc_storeWeak(id *object, nil)
Questa tenuta della contabilità associata a un riferimento debole può richiedere 2-3 volte più a lungo rispetto al rilascio di un riferimento forte. Quindi, un riferimento debole introduce un sovraccarico per il runtime che è possibile evitare semplicemente definendo punti vendita come forti.
A partire da Xcode 7, suggerisce strong
Se guardi la sessione 407 del WWDC 2015 Implementare i disegni dell'interfaccia utente in Interface Builder , suggerisce (trascrizione da http://asciiwwdc.com/2015/sessions/407 )
E l'ultima opzione che voglio sottolineare è il tipo di archiviazione, che può essere forte o debole.
In generale, dovresti rafforzare il tuo outlet, specialmente se stai collegando un outlet a una vista secondaria o a un vincolo che non sarà sempre mantenuto dalla gerarchia della vista.
L'unica volta in cui è davvero necessario indebolire un punto vendita è se si dispone di una vista personalizzata che fa riferimento a qualcosa di backup della gerarchia della vista e in generale non è consigliabile.
Quindi sceglierò forte e farò clic su Connetti che genererà il mio punto vendita.
IBOutletCollection()
non deve essereweak
, altrimenti restituisce comenil
.