Я думал, что буду умным и сохранить адрес функции обратного вызова C++, которая сильно связана с каждым столбцом в NSTableColumn его NSTableView. Я подклассифицировал NSTableColumn и добавил указатель как данные экземпляра. Я реализовал subclassed -dealloc, который разрушает этот указатель (и, конечно, вызывает super dealloc).Когда выпущена NSTableColumn?
Проблема заключается в том, что, как представляется, вызывается вызываемый NSTableColumn -dealloc, когда, например, когда вызывается [myNSTableView removeTableColumn: theColumn]. Я предполагаю, что проблема управления памятью - возможно, NSTableColumn является авторекламой?
Я не мог найти другого делегата/уведомления, когда удаляется NSTableColumn. Должен ли я подклассифицировать NSTableView removeTableColumn только для перехвата удаления столбца?
EDIT: поскольку некоторые задавались вопросом, этот «указатель» представляет собой экземпляр класса C++, созданного из сигналов Boost2. Он обеспечивает механизм сигнала/обратного вызова из модели C++ в метод Objective-C++. Указатель необходимо удалить, чтобы удалить подписку обратного вызова из класса вещания модели.
EDIT2: Что касается определения theColumn, это создать как можно ниже, а затем добавляют к таблице:
MyNSTableColumn * theColumn = [[MyNSTableColumn Alloc] initWithIdentifier: columnModelAsId];
И код в вопросительной итерации через столбцы таблицы, удаляя их:
while([[compareTableView tableColumns] count] > fromWhichColumn) {
[compareTableView removeTableColumn:[[compareTableView tableColumns] lastObject]];
Там отдельная переменная определения в интерфейсе:
IBOutlet NSTableColumn *myDocumentColumn;
... который заострен к моему подклассу (MyNSTableColumn) в IB.
(Примечание: на основе Cell стол - Mac OS)
iOS? C++? Ваши теги не кажутся правильными – JustSid
Указатель на функцию обратного вызова не нужно уничтожать. Является ли это функтором (функционально подобным объектом)? Кроме того, почему важно, когда оно разрушается до тех пор, пока оно в конечном итоге?Если вы подозреваете утечку, используйте инструмент «Утечки», чтобы проанализировать, какой код чрезмерно удерживается или недостаточно выпущен. –
Что такое объявление 'TheColumn'? Является ли это локальной переменной или переменной экземпляра? Какая строка кода (если таковая имеется), которая устанавливает его? –