Ошибка: *** -[CALayer keep]: сообщение отправлено на освобожденный экземпляр 0xdaa54d0

Я работаю над простым приложением для iphone. где я работаю над двумя представлениями. Сначала я нажал другой контроллер представления, и когда я удаляю текущее представление, чтобы вернуться к старому контроллеру представления, я получаю [CALayer keep]. EXEC_BAD_ACCESS.

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

(gdb) обратная трассировка

#0  0x02e21434 in ___forwarding___ ()
#1  0x02e209f2 in __forwarding_prep_0___ ()
#2  0x02dc7f58 in CFRetain ()
#3  0x02dc7a65 in CFArrayCreate ()
#4  0x02dfe043 in -[__NSPlaceholderArray initWithObjects:count:] ()
#5  0x0296eda3 in -[CALayerArray copyWithZone:] ()
#6  0x02ea380a in -[NSObject copy] ()
#7  0x004f742a in -[UIView dealloc] ()
#8  0x00214cb2 in NSPopAutoreleasePool ()
#9  0x004d3698 in _UIApplicationHandleEvent ()
#10 0x035fe17c in PurpleEventCallback ()
#11 0x02df289c in CFRunLoopRunSpecific ()
#12 0x02df18a8 in CFRunLoopRunInMode ()
#13 0x035fc89d in GSEventRunModal ()
#14 0x035fc962 in GSEventRun ()
#15 0x004d1372 in UIApplicationMain ()
#16 0x00002074 in main (argc=1, argv=0xbffff020) at /Users/jtong/Desktop/Elle/main.m:14

Спасибо, Эби


person insomiac    schedule 14.03.2011    source источник


Ответы (2)


Похоже, вы также явно выпускаете что-то, что вы уже выпустили автоматически.

person mharper    schedule 14.03.2011
comment
Я понимаю, что проблема была в Dealloc. Я не отпускал должным образом. Спасибо за ответ. - person insomiac; 15.03.2011
comment
в делелок. По ошибке для одного объекта я сохранил [arr Dealloc].. вместо [arr release]. Это вызывало проблему. - person insomiac; 15.03.2011
comment
Ага. И все, что говорит вам трассировка стека, это то, что это что-то видимое (CALayer), поэтому это может быть UILabel, UIImageView и т. д. Раздражающе расплывчато. Совет: найдите «выпуск» и убедитесь, что у вас есть соответствующее сохранение или выделение. - person Jason Moore; 14.09.2011

Используйте инструменты и включите зомби. Это отследит, где каждый объект был сохранен и освобожден, и поможет вам диагностировать, где происходит дополнительное освобождение.

Как запустить программу iPhone с инструментом Zombies?

person Paul Alexander    schedule 14.03.2011
comment
Привет, Пол, я пробовал это, но это не работает. Когда я запустил свое приложение с помощью инструмента производительности, оно падает. - person insomiac; 14.03.2011