Как освободить объекты, хранящиеся в массиве? - PullRequest
1 голос
/ 22 июля 2010

Пожалуйста, посмотрите на код ниже и предложите лучший подход. Я не могу точно сказать, является ли код правильным. При добавлении объектов в массивы получают ли они счет? Во второй функции я освобождаю локальную переменную "mySubview" или исходный объект?

    // this is a class property
    myArray = [[NSMutableArray alloc] init];    


    - (void)createSubview
    {
        UIView *mySubview = [[UIView alloc] init];
        [self addSubview:mySubview];


        [myArray addObject:mySubview];

    }

    -(void)eventHandler:(NSNotification *) notification
    {
        UIView *mySubview = [notification object];

        [myArray removeObjectIdenticalTo:mySubview];

        [mySubview removeFromSuperview];
        [mySubview release];
    }

1 Ответ

2 голосов
/ 22 июля 2010

При добавлении объектов в массивы они получают счет сохранения?

Да.

Во второй функции я освобождаю локальную переменную«mySubview» или исходный объект?

UIView *mySubview;' определяет локальную переменную mySubview, которая является указателем на ссылку на экземпляр класса UIView.В Objective-C не существует такого понятия, как «локальный объект» или «объект стека» (за исключением блоков, но это выходит за рамки этого вопроса).

Итак, нет, когда вы вызываете [mySubview release] вы отправляете -release на экземпляр UIView, включенного в notification.

То, что release уравновешивает retain, подразумеваемое alloc.Что не совсем правильно.Вы должны сделать что-то вроде:

- (void)createSubview
{
    UIView *mySubview = [[UIView alloc] init];
    [self addSubview:mySubview];
    [myArray addObject:mySubview];
    [mySubview release];
}

-(void)eventHandler:(NSNotification *) notification
{
    UIView *mySubview = [notification object];
    [myArray removeObjectIdenticalTo:mySubview];
    [mySubview removeFromSuperview];
}

О, под "свойством класса" я предполагаю, что вы имеете в виду "переменная экземпляра"?

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