Я бы предложил использовать NSMutableData
вместо malloc()
.Вы можете выделить некоторую память
NSMutableData * dat = [NSMutableData dataWithLength:length];
и использовать ее так же, как если бы malloc
'd chunk
void * buffer = [dat mutableBytes];
Теперь dat
владеет памятью, что помещает ее подобычная схема пересчета какао.С этой точки вы можете сделать одну из двух вещей.
Если этот объект недолговечный и не будет выполнять много таких распределений, NSMutableArray
ивар с именем allocations
или аналогичный может содержать все экземпляры NSMutableData
, и они будутосвобождается, когда объект, чей метод это является, освобождается.
Если хотите, вы можете привязать жизнь NSMutableData
либо к NSValue
, либо к NSInvocation
, в зависимости от ситуации, используя связанные объекты :
objc_setAssociatedObject(value, &dat_key, dat, OBJC_ASSOCIATION_RETAIN);
Где dat_key
- это объявленная поблизости переменная static
, чей адрес вы используете (как рекомендуют документы).
Этозаставляет ассоциатор (value
в данном случае) сохранять объект данных и освобождать его, когда он сам освобождается.