Возможно, у меня нет окончательного ответа, но я поделюсь техникой, которую я решил попробовать, и которая является шагом в правильном направлении.
При использовании ARC компилятор не позволит вам запросить retainCount, и он даже достаточно умен, чтобы помешать вам выполнять executeSelector: @selector (retainCount). Однако я не сдался и пошел еще дальше, чтобы получить доступ к этому полезному индикатору отладки.
[anInstance performSelector:NSSelectorFromString(@"retainCount")];
Это пройдет мимо компилятора и покажет немного больше под капотом. Это не стеки, но с плодотворной регистрацией этого значения вы можете получить некоторые подсказки.
Я, вероятно, собираюсь отказаться от этого, но я играю с еще более хитрой (читай: уродливой) техникой, чтобы получить стеки. Основная идея состоит в том, чтобы «расширить» метод retain с помощью времени выполнения target-c с помощью class_addMethod () или method_setImplementation. Я честно предупрежу, что пока у меня мало надежды на то, что я заработаю, и скоро я могу просто вернуться к более частым журналам вышеупомянутого вызова executeSelector.
Удачи!
edit С тех пор, как я написал это, я обнаружил основные функции ядра:
NSLog("RetainCount: %ld", (CFGetRetainCount((__bridge CFTypeRef) anInstance));
Что может не сработать во всех случаях, но в большинстве точно. См. Документация .