2012-06-29 16 views
63

Eventuali duplicati:
alloc, init, and new in Objective-CQual è la differenza tra [Class new] e [[Class alloc] init] in iOS?

Sono un po 'confuso su [Class new] e [[Class alloc] init]. Ho definito un oggetto content utilizzando [Class new] e [[Class alloc] init].

(1). NSMutableArray *content = [NSMutableArray new]; 
(2). NSMutableArray *content = [[NSMutableArray alloc] init]; 

La mia domanda riguarda le differenze tra [Class new] e [[Class alloc] init]. Per me, (1) e (2) sono simili. Se (1) e (2) sono simili, allora perché usiamo il [[Class alloc] init] il più delle volte, rispetto a [Class new]? Penso che ci debba essere qualche differenza.

Gentilmente spiegare le differenze, pro & contro di entrambi?

+1

è possibile fare riferimento a questo link http://macresearch.org/difference -tra-alloc-init-and-new – janusbalatbat

risposta

123

Alloc: Metodo di classe di NSObject. Restituisce una nuova istanza della classe ricevente.

Init: metodo di istanza di NSObject. Implementato da sottoclassi per inizializzare un nuovo oggetto (il ricevitore) immediatamente dopo la memoria perché è stato allocato.

Nuovo: metodo Class di NSObject. Assegna una nuova istanza della classe ricevente, invia un messaggio init e restituisce l'oggetto inizializzato.

Release: metodo di istanza del delegato NSObject. Riduce il conteggio dei riferimenti del ricevitore.

Autorelease: metodo di istanza del delegato NSObject. Aggiunge il ricevitore al pool autorelease corrente.

Conservare: Metodo di istanza del delegato NSObject. Aumenta il conteggio dei riferimenti del ricevitore.

Copia: Metodo di istanza del delegato NSObject. Restituisce una nuova istanza che è una copia del ricevitore.

Quindi, per concludere, possiamo dire che

alloc va con init

nuovo = alloc + init

+1

Grande! E 'stato utile! –

+0

I delegati non hanno davvero nulla a che fare con questo. Intendi il protocollo 'NSObject' ** **? – dreamlax

9

Qui: alloc, init, and new in Objective-C

Fondamentalmente si tratta di una questione di moderno contro tradizionale. Il vantaggio più diretto di init su new è che esistono molti metodi di init personalizzati.

26

Il metodo +new è semplicemente abbreviazione di +alloc e -init. La semantica della proprietà è identica. L'unico vantaggio dell'utilizzo di +new è che è più conciso. Se è necessario fornire argomenti all'inizializzatore della classe, sarà necessario utilizzare i metodi +alloc e -initWith....

Problemi correlati