2010-01-19 14 views

risposta

31

Sono identici. Vedi documentation.

performSelectorInBackground: withObject: L'effetto di chiamare questo metodo è lo stesso se si chiama il detachNewThreadSelector: toTarget: withObject: metodo NSThread con l'oggetto, di selezione, e l'oggetto attuale del parametro come parametri.

+0

che abbia un senso, dal momento che performSelectorInBackground: withObject: (NSThreadPerformAdditions) categoria è elencato sotto NSObject ... quindi scommetto che letteralmente è solo una chiamata a detachNewThreadSelector: toTarget: withObject: P – Sahil

+0

prega ignorare il mio ultimo commento, stavo parlando attraverso il mio dietro. – Emmanuel

5

Come dice Michael, sono identici. Penso che, per usare una discussione di performSelectorInBackground: withObject: sia più semplice di NSThread.

Tuttavia, NSThread in grado di controllare la sua priorità, stacksize, ecc Se si desidera personalizzare il comportamento, vi consiglio NSThread invece di performSelectorInBackground: withObject:.

2

interessanti voi ragazzi non possono segnalare eventuali differenze tra loro-

ti dirò questo molto. Abbiamo un'app per iPhone bloccata mentre abbiamo visualizzato l'icona di rivelazione "9" nella barra in alto e una finestra con scritto "Invio ..." mentre abbiamo inviato un file audio su un server e performSelectorInBackground: NON stava funzionando. Quando abbiamo scambiato performSelectorInBackground con detachNewThreadSelector, ha funzionato bene, ma ora si lamenta che nessun oggetto autoreleased in esecuzione in quel thread è soggetto ad essere rilasciato dal pool .. forse questo è perché il pool è nel thread principale?

+2

penso che dovresti avere un pool di autorelease per ogni thread. –

3

Corey, se si sta utilizzando un nuovo thread e si sta utilizzando [autorelease degli oggetti], sarà necessario creare il proprio pool di autorelease. Abbastanza semplice da fare:

- (void)uploadDataOnThread 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // do something here... 

    [pool release]; 
} 
+0

Penso che sia '[pool drain]' –

+0

release e drain sono quasi gli stessi: http://stackoverflow.com/a/799257/545726 – aiham