Please change from: - (UIView *)dequeueReusablePage { UIView *result = [_recycledPages anyObject]; if (result) { [_recycledPages removeObject:[[result retain] autorelease]]; } return result; } to: - (UIView *)dequeueReusablePage { UIView *result = [_recycledPages anyObject]; if (result) { [_recycledPages removeObject:[[result retain] autorelease]]; return nil; } return result; } otherwise the removeObject has no effect.