Запрос экземпляра NSMutableData для его mutableBytes просто возвращает указатель на существующий (уже выделенный) буфер, которым он управляет для вас.Это не оказывает никакого влияния на память с точки зрения управления.
Итак, в вашем первом примере тот факт, что mutableData, по-видимому, не освобождается при просмотре в инструментах, может быть связан с автоматическим выпускомсреда бассейна в то время.Имеет ли код, использующий mutableData таким образом, NSAutoreleasePool на месте?Вы видите предупреждения в консоли типа "autorelease вызывается без пула; только утечка"?Если это так, вам просто нужно обернуть код в:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// bitmap drawing code here
[pool drain];
Во втором примере вы можете использовать alloc / init для экземпляра NSMutableData, но вам нужно будет освободить его после того, как вы закончили использоватьуказатель вы получаете от mutableBytes.Указатель будет указывать на освобожденную (освобожденную) память после того, как вы вызовете release, и доступ к ней приведет к страшному EXC_BAD_ACCESS.
Кроме того, использование malloc / free, вероятно, будет моим первым выбором здесь, так как вы получаетебыть очень явным о том, как и когда память распределяется и освобождается.Авто-релиз NSMutableData + на самом деле ничего не покупает, кроме некоторых накладных расходов, если вы не используете объект для чего-либо еще.