У меня есть объектная система, которую я написал на C, которая содержит подсчет ссылок для объектов (объекты - это просто структуры, которые имеют retainCount int).Если у меня есть блок, подобный следующему:
typedef void (^MyBlock)();
void doBlockStuff(MyBlock b){
Block_copy(b);
//...
}
__block int i=0;
doBlockStuff(^{
++i;
});
, то динамическая куча выделяет целое число i при вызове Block_copy.Однако, если я вместо этого использую объект с подсчетом ссылок:
typedef void (^MyBlock)();
void doBlockStuff(MyBlock b){
Block_copy(b);
//...
}
__block Object* obj=Object_New();
doBlockStuff(^{
DoObjectStuff(obj);
});
, тогда сам указатель, а не его ссылочное значение, выделяется динамически во время выполнения (хотя он уже выделяется динамически в функции Object_New).Поскольку объект считается подсчитанным, другая функция может прийти и освободить объект до освобождения блока.Если я явно сохраню объект, то он никогда не будет освобожден.Итак, мой вопрос: как добавить обратный вызов в Block_dealloc для явного освобождения объекта при его освобождении?
Спасибо.