NSMutableArray как правильно добавить объекты и выпустить - PullRequest
4 голосов
/ 27 октября 2010

Меня беспокоит то, что я правильно добавляю объект и освобождаю его.

  1. Что на самом деле содержит NSMutableArray - копия объекта или просто указатель на них?
  2. Какова последовательностьв работе с NSMutableArray?(alloc, init, work, release)
  3. Как правильно его сохранить и освободить?

    NSMutableArray *listData = [[NSMutableArray alloc] init];
    int i = 0;
    for (i = 0; i < 3; i++)
    {
        MyData *obj = [[MyData alloc] init];
        NSString *name = nil;
        switch (i)
        {
            case 0:
                name = @"Semen";
                break;
            case 1:
                name = @"Ivan";
                break;              
            case 2:
                name = @"Stepan";
                break;              
            default:
                break;
        }       
        obj.name = name;
        [listData addObject: obj];
        [obj release];
     }
     [listData release]  //in dealloc method
    

или мне нужно сначала освободить все содержащиеся в нем объектыи только чем выпускать объект NSMutableArray?

Спасибо!

1 Ответ

18 голосов
/ 27 октября 2010

NSMutable массив содержит ссылку на объект.Когда вы добавляете объект в NSMutableArray, он сохраняет объект.То есть после добавления объекта в массив вы должны его освободить.Когда вы закончите с этим объектом в массиве, вы можете удалить объект из массива.После удаления объект автоматически получает сообщение об освобождении.Так что вам не нужно отправлять ему другое сообщение о выпуске.И если вы освобождаете сам массив, нет необходимости отправлять сообщение о выпуске всем объектам, так как во время освобождения NSMutableArray он будет отправлять выпуск всем объектам, которые он содержит.

1. alloc NSMutableArray.
2. alloc object1.
3. add object1 to array.
4. release object1.
5. alloc object2.
6. add object2 to array.
7. release object2.
8. add as many objects as needed in this manner.
8. work with object1.
9. remove object1 from array. it will receive a release automatically.
10. release the array. object2 and others will receive a release.

Надеюсь, это поможет.

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