subview не вызывал dealloc, когда superview (UIViewController) dealloc - PullRequest
0 голосов
/ 10 марта 2011

Я был сбит с толку с управлением памятью removeFromSuperview.

Вот мой код:

MySubView *tMySubView = [[MySubView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
tMySubView.center = self.view.center;
tMySubView.tag = 1111;
[self.view addSubview:tMySubView];
[tMySubView release];

"self" - это UIViewController.

Когда "self" вызывает deallocно MySubView не вызывал dealloc.

Я знаю, что addSubView retainCount + 1.

Поэтому я пытаюсь добавить [tMySubView removeFromSuperview] в "self" dealloc

И MylocubView dealloc былназывается ...

Должен ли я добавить [subView removeFromSuperview];когда superView dealloc?

или superView removeFromSuperview, он будет автоматически вызывать removeView ofromSuperview для SubView ...?

Я не могу понять это.: (

Спасибо!

1 Ответ

0 голосов
/ 10 марта 2011

Это означает, что self.view неправильно выпущен.Он удалит все свои подпредставления только в том случае, если он освобожден.

Проверьте ваш метод loadView (где вы, вероятно, его инициализируете).Если это выглядит так:

-(void) loadView {
   self.view = [[UIView alloc] init];
}

, значит, у вас есть утечка, и вам нужно переписать ее так:

-(void) loadView {
   self.view = [[[UIView alloc] init] autorelease];
}

ИЛИ

-(void) loadView {
   UIView* v = [[UIView alloc] init];
   self.view = v;
   [v release];
}

Также проверьтево всех местах, где у вас есть доступ к self.view, и убедитесь, что вы не чрезмерно сохраняете его.

...