EXC_BAD_ACCESS в CALayerCollectLayers_ на iPhone - PullRequest
1 голос
/ 15 мая 2009

При работе на устройстве:

Program received signal:  “EXC_BAD_ACCESS”.

Debugger:

#0  0x31e11158 in CALayerCollectLayers_
#1  0x31e11180 in CALayerCollectLayers_
#2  0x31e11180 in CALayerCollectLayers_
#3  0x31dd7428 in CALayerDisplayIfNeeded
#4  0x31dd5780 in CAContextCommitTransaction
#5  0x31dd543c in CATransactionCommit
#6  0x3026a0ec in __CFRunLoopDoObservers
#7  0x30269418 in CFRunLoopRunSpecific
#8  0x30269326 in CFRunLoopRunInMode
#9  0x306941fe in -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
#10 0x30694f9a in -[NSRunLoop(NSRunLoop) run]
#11 0x0000319e in -[AppController createInStreamThread] at AppController.m:395
#12 0x30672e08 in -[NSThread main]
#13 0x30672cd6 in __NSThread__main__
#14 0x3146178c in _pthread_body

При работе в симуляторе:

modifying layer that is being finalized - 0x52f2b0

Ответы [ 2 ]

3 голосов
/ 15 мая 2009

Этот тип дефекта может быть трудно отследить. Я рад, что ты нашел это так быстро. К счастью, есть несколько хороших инструментов, которые могут вам помочь.

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

Если после этого вы обнаружите этот дефект, включите NSZombies , MallocStackLogging и MallocStackLoggingNoCompact, затем используйте malloc_history , чтобы найти место, где было выполнено выделение. Это не идеально, но это очень помогает.

2 голосов
/ 15 мая 2009

Оказывается, я переиздала UIButton.

UIButton *button = [self buttonWith...];
...
[self addSubview:button];
[button release];

Но [self buttonWith ...] вернул кнопку автоматического освобождения, поэтому моего выпуска не должно было быть. Удаление этой строки исправило сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...