Выпуск CGMutablePathRef из NSMutableArray - PullRequest
2 голосов
/ 15 июня 2011

Я храню CGMutablePathRefs внутри NSMutableArray через NSValue.

Вроде так:

CGMutablePathRef path = CreateMutablePath();
[self.myArray addObject:[NSValue valueWithPointer:path]];

В моем dealloc я пробовал это:

- (void)dealloc
{
    [super dealloc];

    for (int i = 0; i < self.myArray.count;) {

        NSValue *currentPath = [self.myArray objectAtIndex:i];

        CGMutablePathRef path = (CGMutablePathRef)[currentPath pointerValue];

        CGPathRelease(path);
    }

    self.myArray = nil;

}

Однако, когда я запускаю это, я получаю следующее исключение:

malloc: *** error for object 0x16b250: pointer being freed was not allocated

Может кто-нибудь объяснить мне, почему это так и как мне правильно выпустить CGMutablePathRefs?

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 15 июня 2011

[super dealloc] всегда должна быть последней строкой вашего dealloc.

Вы не когда-либо хотите освобождать объекты в массиве таким способом,Пусть массив управляет памятью.

Т.е .:

CGMutablePathRef path = CreateMutablePath();
[self.myArray addObject:[NSValue valueWithPointer:path]];
CGPathRelease(path);

И:

- (void) dealloc
{
   self.myArray = nil;
   [super dealloc];
}
0 голосов
/ 15 июня 2011

Хотя я ценю исправления Bavarious и bbum о размещении [super dealloc], это не было моей проблемой.В моем реальном коде я называю «освобождение» кода отдельным методом.Я поместил это в файл в dealloc здесь, потому что я пытался упростить свой вопрос и по ошибке вставил его не в то место.Я перенес код на другую машину и не испытывал никаких проблем.Я перезагрузил оригинальную машину, и теперь она тоже ведет себя правильно.Я думаю, я был в странном состоянии или что-то в этом роде.

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