C'è una differenza tra le inizializzazioni [NSArray new]
e [NSArray array]
?Differenza tra inizializzazioni nuove e array
array
sembra essere parte dell'implementazione di NSArray
mentre new
appartiene a NSObject
.
C'è una differenza tra le inizializzazioni [NSArray new]
e [NSArray array]
?Differenza tra inizializzazioni nuove e array
array
sembra essere parte dell'implementazione di NSArray
mentre new
appartiene a NSObject
.
nuovo = alloc + init
Questo metodo è una combinazione di alloc e init. Come allocazione, lo inizializza la variabile di istanza isa del nuovo oggetto in modo che punti nella struttura dei dati della classe. Quindi invoca il metodo init per completare il processo di inizializzazione.
+new
è implementato letteralmente come:
+ (id) new
{
return [[self alloc] init];
}
e new
non supporta inizializzatori personalizzati (come initWithObjects
), in modo da alloc + init
è più esplicito di quanto new
Così la domanda ora è circa:
[gamma NSArray] vs [[NSArray alloc] init]
La differenza principale tra questi è che se non si utilizza ARC (Automatic Reference Counting). Il primo restituisce un oggetto autoreleased mantenuto e . Il secondo restituisce un oggetto che è solo mantenuto. Quindi, nel primo caso, si vorrebbe mantenerlo se si desidera mantenere lo stesso per un tempo maggiore rispetto al ciclo di esecuzione corrente. Nel secondo caso, , dovresti rilasciarlo o autorizzarlo automaticamente se non hai vuoi tenerlo in giro.
Ora che abbiamo ARC, questo cambia le cose. Fondamentalmente, nel codice ARC, è non importa quale di questi si utilizza.
Ma tenere a mente che [NSArray array]
restituisce un array immutabile vuoto, in modo da utilizzare array
con NSMutableArray
più senso
Per ulteriori informazioni:
alloc, init, and new in Objective-C
Use of alloc init instead of new
Difference between [NSMutableArray array] vs [[NSMutableArray alloc] init]
Aggiungendo fino a questa risposta, relativa a [array NSArray], viene generata una matrice immutabile vuota. È abbastanza inutile farlo ovviamente (come l'utilizzo di nuovo), ma cambia quando si utilizza un NSMutableArray. Il fatto è che, come ha detto @Aladin, ora che abbiamo ARC, non fa alcuna differenza. – Erakk
Arriva all'utilizzo della sintassi Penso e preferisci. – Tander
Non è completamente inutile, puoi fare qualcosa come 'NSArray * arr = [array NSArray]; NSArray * arr2 = [arr arrayByAddingObject: @ "ha!"]; '. Potrebbe essere utile .. ad un certo punto ... credo – Daniel