Я используюИспользуя байты экземпляра NSMutableData, позволяя ему быть autoreleased
NSMutableData* mutableData = [NSMutableData dataWithLength: someLength];
void* bitmapData = [mutableData mutableBytes];
CGContextRef context = CGBitmapContextCreate(bitmapData,...);
// ...use context
CGContextRelease(context);
У меня есть autorelease бассейн на месте, но при взгляде на это инструменты, mutableData
не кажется, быть освобожден.
Я думал об использовании alloc
/init
, как показано ниже, но я не уверен, что отправка release
очистит bitmapData
.
NSMutableData* mutableData = [[NSMutableData alloc] initWithLength: someLength];
void* bitmapData = [mutableData mutableBytes];
[mutableData release];
//...
Что такое правильный способ использования NSMutableData
здесь?
Я думал, что использовать NSMutableData
вместо malloc()
и free()
было бы удобно, потому что он будет автореализован. но теперь я не уверен, что это правда.
Да, он никогда не освобождается даже после CGContextRelease(). Я не передаю необработанные данные или NSMutableData ко всему, кроме функции создания контекста. – eugene
Под «никогда» вы подразумеваете, даже после того, как цикл событий завершен, так что, когда вы вызываете это несколько раз, ваше общее использование памяти продолжает расти? –
grr, имел другие утечки где-то в другом месте, которое сохраняет изображение, созданное из контекста, не уверен, что сохраняет исходный байт, следовательно, mutabledata. Но, удалив другие утечки, инструмент не показывает mutableData как живой. Возможно, инструменты были смущены – eugene