Массив с массивами, проблема с памятью - PullRequest
2 голосов
/ 08 февраля 2012

Как можно создать следующий массив без утечек памяти:

Это должен быть массив с массивами внутри

 arr = [[NSMutableArray alloc] initWithObjects:
                [[NSMutableArray alloc] init], 
                [[NSMutableArray alloc] init],    
                [[NSMutableArray alloc] init],
                [[NSMutableArray alloc] init],     
                [[NSMutableArray alloc] init], 
                [[NSMutableArray alloc] init],     
                [[NSMutableArray alloc] init], nil];

Ответы [ 3 ]

3 голосов
/ 08 февраля 2012

Вместо этого используйте [NSMutableArray array], что создаст автоматически выпущенный объект, о котором вам не нужно беспокоиться:

arr = [NSMutableArray arrayWithObjects:
            [NSMutableArray array], 
            [NSMutableArray array],    
            [NSMutableArray array],
            [NSMutableArray array],     
            [NSMutableArray array], 
            [NSMutableArray array],     
            [NSMutableArray array], nil];

Обратите внимание, что вы должны сохранить / отпустить arr, если хотите удержать его,Если вам действительно нужны массивы массивов, у меня есть класс с именем RJGrid, который сделает это за вас, и быстрее, чем несколько NSMutableArrays (связанные списки медленны для поиска).

Выможете скачать класс здесь , в моем дропбоксе.Он использует ARC, но достаточно прост для преобразования в среду с подсчетом ссылок, если вы хотите, чтобы я это сделал.

1 голос
/ 08 февраля 2012

Используйте пул памяти с автоматическим освобождением и освободите пул, когда закончите работу с переменной arr.

http://www.alphero.com/mobile-development/understanding-objective-c-autorelease-memory-management/

1 голос
/ 08 февраля 2012

Если вы используете ARC, вам не нужно ничего делать. Если вы не используете ARC, вы можете автоматически освободить массивы:

arr = [[NSMutableArray alloc] initWithObjects:
                [[[NSMutableArray alloc] init] autorelease], 
                [[[NSMutableArray alloc] init] autorelease],    
                [[[NSMutableArray alloc] init] autorelease],
                [[[NSMutableArray alloc] init] autorelease],     
                [[[NSMutableArray alloc] init] autorelease], 
                [[[NSMutableArray alloc] init] autorelease],     
                [[[NSMutableArray alloc] init] autorelease], nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...