I metodi chiamano trattenere gli argomenti quando vengono chiamati?
-
12-11-2019 - |
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?
Soluzione
dal documentazione di detachNewThreadSelector:toTarget:withObject:
Gli oggetti Atarget e Anargument vengono mantenuti durante l'esecuzione del thread indipendente, quindi rilasciati.