Ho notato di recente un arresto anomalo in una delle mie app quando un oggetto ha tentato di inviare un messaggio al suo delegato e il delegato era già stato rilasciato.Verifica se è stato rilasciato un oggetto prima di inviarlo a un messaggio
Al momento, poco prima di chiamare qualsiasi metodo delegato, ho eseguito questo controllo:
if (delegate && [delegate respondsToSelector:...]){
[delegate ...];
}
Ma ovviamente questo non tiene conto se il delegato non è pari a zero, ma è stato deallocato.
Oltre a impostare il delegato dell'oggetto su zero nel metodo dealloc
del delegato, c'è un modo per controllare se il delegato è già stato rilasciato solo in caso non abbia più un riferimento all'oggetto.
'if (delegato)' è ridondante - '[delegate respondsToSelector:]' sarà false se 'delegate' è nil. – shosti
Punto interessante. Non ci avevo pensato prima. –