I just noticed this in some code that's been working for months. Though it makes me curious I'm sure we've been living on borrowed time...
Assuming activeItem:
@property (nonatomic, retain) ItemView *activeItem;
And we have this conditional in touchesEnded:
if (CGRectContainsPoint(dropRect, touchLocation)) {
ItemView *replacementItem = [[ItemView alloc] initWithFrame:frame];
[newItems replaceObjectAtIndex:[newItems indexOfObject:activeItem] withObject:replacementItem];
[self addSubview:replacementItem];
[controller.view.subView addItem:activeItem];
[replacementItem goCenter];
[replacementItem release];
}
The only thing that's retaining activeItem is the NSArray, newItems
. Should I retain it before the call to replaceObjectAtIndex
and then release it when I release replacementItem
? Another way?
Seems to be working fine but isn't it only a matter of time before EXC_BAD_ACCESS?!?