Domanda

Se chiamo un metodo in Objective-C con un argomento e rilascia l'argomento Afterwords.

id argumentI = [Object new]; 
[ classA method1: argumentI ];
[ argumentI release ];

Quindi so che l'argomento viene rilasciato dopo che il metodo1 è finito, perché le righe sono elaborate lineari. Ma quando chiamo il metodo in un thread di sfondo:

[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];

E quindi il thread principale rilascia l'oggetto, mentre il lavoro di fondo usa l'argomento per qualcosa (con l'accettazione, che il reterncount sarebbe 1 prima che il metodo venga chiamato). Potrei ottenere un errore, a causa dell'uso di uno zombi (uso di un oggetto, che è già deallocato)?

La domanda è:

I metodi chiamano trattenere su un oggetto che è un argomento? O devo chiamare Retening all'inizio del metodo, se è come il problema sopra?

È stato utile?

Soluzione

dal documentazione di detachNewThreadSelector:toTarget:withObject:

Gli oggetti Atarget e Anargument vengono mantenuti durante l'esecuzione del thread indipendente, quindi rilasciati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top