Sto convertendo del codice in ARC. Il codice cerca un elemento in un NSMutableArray, quindi trova, rimuove e restituisce quell'elemento. Il problema è che l'elemento viene deallocata immediatamente dopo "removeObjectAtIndex":removeObjectAtIndex causa "il messaggio inviato all'istanza deallocata"
- (UIView *)viewWithTag:(int)tag
{
UIView *view = nil;
for (int i = 0; i < [self count]; i++)
{
UIView *aView = [self objectAtIndex:i];
if (aView.tag == tag)
{
view = aView;
NSLog(@"%@",view); // 1 (view is good)
[self removeObjectAtIndex:i];
break;
}
}
NSLog(@"%@",view); // 2 (view has been deallocated)
return view;
}
quando l'eseguo, ottengo
*** -[UIView respondsToSelector:]: message sent to deallocated instance 0x87882f0
alla seconda dichiarazione di registro.
Pre-ARC, sono stato attento a conservare l'oggetto prima di chiamare removeObjectAtIndex :, quindi a eseguire il rilascio automatico. Come dico a ARC di fare la stessa cosa?
Cosa significa '[auto removeObjectAtIndex: i];' fare? – hypercrypt