iPhone - когда CGDataProviderRef выпущен, он разрушает динамические поля - PullRequest
0 голосов
/ 16 декабря 2011

Я создал CGDataProviderRef, и одним из параметров является массив пикселей.Когда я освобождаю провайдера, мне также нужно освободить память, или провайдер делает это сам?

pixels = (Byte *) malloc([data length] * sizeof (Byte));   
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, pixels, [data length], NULL);

По сути, мне нужно позвонить:

[provider release];
[free pixels];

1 Ответ

1 голос
/ 16 декабря 2011

Если у вас уже есть данные в объекте NSData, вы можете вместо этого использовать CGDataProviderCreateWithCFData, чтобы вам не пришлось неправильно размещать и копировать пиксели.

Если вы настаиваете на использовании массива malloc, вы можете предоставить обратный вызов, который вызывается при освобождении поставщика данных, например:

void freePixels(void *info, const void *data, size_t size) {
    free((void*)data);
}

CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, pixels, [data length], freePixels);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...