У меня есть UIView, который я создаю программно примерно так:
@implementation SlideShowView
- (id)initWithImages
{
…
if (self=[super initWithFrame:CGRectMake(0, 0, 320, 480)])
{
// init objects here
}
return self;
}
- (void)dealloc
{
printf("dealloc slide show view\n");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"unlockUI" object:nil ];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"setUserRating" object:nil ];
[mCurrentImageView release];
[mRightImageView release];
[mLeftImageView release];
[mImages release];
[queue cancelAllOperations];
[queue release];
[managingArray release];
[super dealloc];
}
с контроллером uiview, который содержит это:
- (void)loadView {
{
...
self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
self.slideShowViewObject = [[SlideShowView alloc] initWithImages];
[self.view addSubview:slideShowViewObject];
…
}
-(void)dealloc
{
[slideShowViewObject release];
[self.slideShowViewObject removeFromSuperview];
printf("dealloc of slideshow view controller\n");
[super dealloc];
}
это похоже на возможность освобождения и контроллера представления, и представления, но когда я помещаю этот контроллер представления обратно в стек, я получаю сообщение с включенным зомби: - [SlideShowView retain]: сообщение отправлено на освобожденный экземпляр 0x43ab160
Должен ли alloc не создавать новый экземпляр представления при нажатии контроллера? Я не понимаю, и, потратив много часов на чтение других постов, а также на просмотр руководств по памяти, я бы сказал, что я полностью озадачен! Может кто-нибудь предложить какие-нибудь указатели? Я только опубликовал код, который я счел необходимым, но я могу опубликовать больше, если это будет необходимо.
Большое спасибо!