Альтернатива NSZombie

Я пытаюсь отладить сбой EXC_BAD_ACCESS с помощью NSZombie. Мое приложение создает много крупных объектов, но с включенным NSZombie они не выпускаются, что приводит к сбою приложения в считанные секунды. Это означает, что я даже не могу вызвать сбой EXC_BAD_ACCESS до сбоя приложения из-за нехватки памяти.

Есть ли альтернатива? Могу ли я включить NSZombie для конкретного файла вместо всего проекта? Как еще можно отладить этот сбой (я знаю, что он вызван UIGestureRecognizer, но я часто их использую, чтобы он не сузил проблему).

Благодарю.

Редактировать: Спасибо за совет. Я думаю, что я, возможно, решил проблему и сообщу после большего тестирования.

Редактировать 2: Решил проблему самостоятельно, но выбрал ответ, который, кажется, будет хорошим решением для любых подобных проблем в будущем.

2 ответа

Решение

Все, о чем я могу думать, это реализовать это вручную; создать прокси-контейнер, который содержит объект типа id и назначает это как -forwardingTargetForSelector: а также заставить его ответить на -isKindOfClass:, так далее.

Отключите ARC для прокси и сохраните его во время init и проверить свой retainCount при назначении цели пересылки.

Если счетчик равен 1, тогда выдайте исключение или зарегистрируйте предупреждение или что-то еще.

Пусть подозрительные классы завернутся в себя и вернут прокси в качестве последней строки своего модуля.

Для возможных бонусных баллов, магазин [NSThread callStackSymbols] где-то (вероятно, на диске) во время прокси-модуля, чтобы вы могли хотя бы узнать, где был создан неправильно управляемый объект.

NSZombies был / предназначен для приложений, которые используют свое собственное управление памятью. Если ваше приложение использует ARC, это не поможет.

Создать новую точку останова: все исключения

Обычно это должно показать вам, где вы вызываете плохой доступ.

Другие вопросы по тегам