EXC_BAD_ACCESS в obj_msgSend isKindOfClass: - PullRequest
0 голосов
/ 17 ноября 2011

Я получаю сбой во второй раз, когда я пытаюсь добавить определенный вид в качестве подпредставления. Авария происходит здесь:

-(void)AddAsScrollableSubContext:(UIView*)view {
    [pExtendedScrollableSubContextBounds addSubview: view]; //CRASH HERE
    pSubScroll.userInteractionEnabled = true;
}

во второй раз я звоню ...

[mSongContext AddAsScrollableSubContext:pEQRoot];

Поток - это что-то вроде

[mSongContext AddAsScrollableSubContext:pEQRoot];
...Load a lot of stuff
...Press a Button
...Unload a lot of stuff
[pEQRoot removeFromSuperview];
...Press a Button
[mSongContext AddAsScrollableSubContext:pEQRoot];

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

Оба объекта (pExtendedScrollableSubContextBounds и pEQRoot) представляются действительными. Добавление другого подпредставления в pExtendedScrollableSubContextBounds работает нормально, а вызов других операций в pEQRoot (subview, frame) также работает.

Я прочитал в objsend r0 был объектом, а r1 был селектором, поэтому я посмотрел на адрес памяти для r1 и увидел ...

memdump

Такое ощущение, что я где-то стираю память в isKindOfClass: но я не совсем уверен. Может кто-нибудь указать мне больше информации на iOS obj_msgsend? Есть ли способ, которым я могу установить точку наблюдения, чтобы ловить, когда происходит этот мусор памяти?

1 Ответ

0 голосов
/ 17 ноября 2011

Используйте NSZombies для решения проблемы.

На немного не связанной ноте есть эмпирическое правило - NARC, которое обозначает новое, выделять, сохранять, копировать.Если вызов метода включает какое-либо из этих ключевых слов, то у нас есть право собственности на объект, и мы должны освободить объект.

...