Objective C “сообщение, отправленное в освобожденный экземпляр 0x5633b0”

Вы можете использовать

Выражение соответствия - /[0-9]{12}/
Заменить выражение - /[0-9]{4}$/
[1111 ] Заменить Char - empty

Это позволит найти все 12-значные фрагменты текста и удалить последние 4 цифры из каждого найденного соответствия.

25
задан Srikar Appalaraju 14 August 2011 в 07:50
поделиться

4 ответа

0x5633b0 вероятно адрес рассматриваемого объекта (значение self). Можно использовать NSLog или printf с %p для печати его.

30
ответ дан Logan Capaldo 28 November 2019 в 17:51
поделиться

Вы не управляете своей памятью правильно - Вы звоните release / autorelease на некотором объекте больше раз, чем Вы звоните retain. Удостоверьтесь, что Вы следуете всем правилам, размеченным в Руководство по программированию управления памятью для Какао .

0x5633b0 является просто адресом ячейки памяти, в которой хранится объект. Одна вещь, которую можно попытаться сделать, состоит в том, чтобы добавить некоторый код к init метод:

- (void) init
{
    if(self == (MyClass*)0x5633b0)
        NSLog(@"Allocated object at address 0x5633b0");  // put a breakpoint on this line
    // do rest of init...
}

, Если у Вас есть какой-либо другой init методы (например, initWithCoder:, который называют для объектов, которые инстанцируют от XIB), удостоверьтесь, что поместили этот отрывок в те методы также. Поместите точку останова на NSLog строка и затем посмотрите, когда она будет поражена. Обратите внимание, что это может несколько раз поражаться, если объект выделяется в том адресе, освобожденном, и затем другой объект, оказывается, перераспределен в том же адресе. Последний хит перед катастрофическим отказом является тем, который Вы хотите.

-12
ответ дан Adam Rosenfield 28 November 2019 в 17:51
поделиться

In the debugger, type info symbol 0x5633b0 and you'll get some indication as to what object it is. One other thing that might be helpful is backtrace which will give you a stack trace. All in all, this blog entry has some great tips.

11
ответ дан 28 November 2019 в 17:51
поделиться

Когда я недавно столкнулся с подобными проблемами, у меня лучше всего сработало следующее:

  1. В разделе Проект -> Изменить активный исполняемый файл -> вкладка Аргументы -> Раздел переменных среды я добавил и установил в ДА следующие переменные: NSAutoreleaseFreedObjectCheckEnabled , NSZombieEnabled и NSDebugEnabled .

  2. В меню «Выполнить» я выбрал Включить защиту от ошибок .

С этими настройками отладчик дал больше подсказок о том, что не так с моим кодом.

(Я нашел эти советы здесь )

Удачи, Ори

42
ответ дан 28 November 2019 в 17:51
поделиться