Утечка памяти с массивом - PullRequest
0 голосов
/ 04 марта 2011

Может кто-нибудь направить меня в правильном направлении. Когда я загружаю этот файл как перо, выгружаю его и перезагружаю его, инструменты говорят, что у меня утечка памяти. В частности, это говорит о том, что там, где я устанавливаю CompareOptions NSMutableArray, и где я вызываю [vc release]. CompareOptions - это свойство синтеза, которое также освобождается в dealloc. Большое спасибо заранее.

- (void)viewDidLoad{
[super viewDidLoad];

//NSLog(@"Comparison.viewDidLoad");

self.compareOptions = [[NSMutableArray alloc] init];


self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)];

    //NSDictionary  * currComparison    = (NSDictionary*)[data objectAtIndex:0];
    //NSArray           * correctOptions    = [currComparison objectForKey:@"correct"];

for(int i = 0; i < 3; i++)
{
    UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil];

    ComparisonOptions * options = (ComparisonOptions *)vc.view;

    [options setup];
    options.index = i;

    //options.frame = CGRectMake(355 + (306 * i), 475, options.frame.size.width, options.frame.size.height);

    //[options setCorrect:[correctOptions objectAtIndex:i]];

    [vc release];

    [self.view addSubview:options];

    [self.compareOptions addObject:options];
}

[self.view addSubview:self.tabs];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabSelectedHandler:) name:@"tabSelected" object:nil ];

[self update:0];}

1 Ответ

3 голосов
/ 04 марта 2011

как выглядит свойство compareOptions и вкладок? Сохраняет ли он ваши объекты?

Если он сохранится, то вы получите двойное удержание, если будете использовать установщик и alloc.

self.compareOptions = [[NSMutableArray alloc] init];
    ^ retains                          ^^^^^ retains

self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)];
    ^ retains                ^^^^^ retains

Вы можете использовать это вместо

self.compareOptions = [NSMutableArray array];
self.tabs = [[[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)] autorelease];

UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil];
ComparisonOptions * options = (ComparisonOptions *)vc.view;

[vc release];

[self.view addSubview:options];

vc.view (т. Е. Опции) будут освобождены в то же время, когда vc будет освобожден. И это происходит, когда вы звоните [vc release]. Вы не можете использовать параметры после этого.

Вы должны выпустить vc после того, как добавили представление в подпредставление.


И вам следует подумать о лучших именах классов. Я бы никогда не предположил, что ComparisonOptions - это представление. Это больше похоже на NSCaseInsensitiveSearch и т. Д. Вы знаете, как вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...