2012-02-24 9 views

risposta

145

L'unica differenza tra weak e assign è che se l'oggetto A weak punti di proprietà per viene deallocato, allora il valore del puntatore weak sarà impostato nil, in modo che non si corre il rischio di accesso spazzatura. Se si utilizza assign, ciò non accadrà, quindi se l'oggetto viene deallocato da sotto di te e si prova ad accedervi, si accede a Garbage.

Per oggetti Objective-C, se ci si trova in un ambiente in cui è possibile utilizzare weak, è necessario utilizzarlo.

+16

Sapete perché alcune delle classi del framework Cocoa Touch utilizzano ancora l'assegnazione per i delegati? Ad esempio, il delegato di [UISearchDisplayController] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchDisplayController_Class/Reference/Reference.html#//apple_ref/occ/instp/UISearchDisplayController/delegate) è ancora assegnato. Perché non è mai stato aggiornato? – Pwner

+0

@Pwner sembra essere stato deprecato in iOS 8.0 – Stavash

+0

Ecco un esempio non deprecato: anche 'UITableView' ha' assign' per il suo delegato: '@property (nonatomic, assign) id delegate;' –

Problemi correlati