일부 코드를 ARC로 변환 중입니다. 이 코드는 NSMutableArray에서 요소를 검색 한 다음 해당 요소를 찾아서 제거하고 반환합니다. 문제는 요소가 "removeObjectAtIndex"즉시 해제됩니다 있다는 것입니다 : 나는 그것을 실행하면removeObjectAtIndex가 "할당 해제 된 인스턴스로 메시지 전송"을 발생시킵니다.
- (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;
}
, 나는 두 번째 로그 문에
*** -[UIView respondsToSelector:]: message sent to deallocated instance 0x87882f0
를 얻을.
Pre-ARC, 나는 removeObjectAtIndex :를 호출하기 전에 객체를 유지하고 나서 자동으로 릴리즈합니다. ARC에게 똑같은 일을 시키라고 어떻게 말합니까?
'[자기 removeObjectAtIndex을 : 내가] 참조;'합니까? – hypercrypt