Program received signal: “EXC_BAD_ACCESS”.
(gdb) bt
#0 0x30011940 in objc_msgSend()
#1 0x30235f24 in CFRelease()
#2 0x308f497c in -[UIImage dealloc]()
#3 0x30236b78 in -[NSObject release]()
#4 0x30a002a0 in FlushNamedImage()
#5 0x30250a26 in CFDictionaryApplyFunction()
#6 0x30a001a4 in _UISharedImageFlushAll()
#7 0x30a00738 in +[UIImage(UIImageInternal) _flushCacheOnMemoryWarning:]()
#8 0x3054dc80 in _nsnote_callback()
#9 0x3024ea58 in _CFXNotificationPostNotification()
#10 0x3054b85a in -[NSNotificationCenter postNotificationName:object:userInfo:]()
#11 0x3054dbc0 in -[NSNotificationCenter postNotificationName:object:]()
#12 0x30a00710 in -[UIApplication _performMemoryWarning]()
#13 0x30a006a8 in -[UIApplication _receivedMemoryNotification]()
#14 0x30a005d8 in _memoryStatusChanged()
#15 0x30217416 in __CFNotificationCenterDarwinCallBack()
#16 0x3020d0b0 in __CFMachPortPerform()
#17 0x30254a76 in CFRunLoopRunSpecific()
#18 0x3025416a in CFRunLoopRunInMode()
#19 0x320452a4 in GSEventRunModal()
#20 0x308f037c in -[UIApplication _run]()
#21 0x308eea94 in UIApplicationMain()
#22 0x00002096 in main (argc=1, argv=0x2ffff514)
目前我的程序中有一个非常奇怪的错误。有时会发生,有时并不会。但这里是发生了什么事情的总结:有人可以给我一个关于这个stacktrace在iPhone应用程序中的手吗?
当程序启动:
- 保存的数据(仅短短的plist由13种元素),如果存在被加载。
- 包含1014个字符串的巨大plist被加载到NSMutableDictionary中。
- 另一个包含78个字符串的plist被加载到一个NSArray中。
- 播放.mp4影片。
该错误发生在OpenGL ES View被删除并且用户将要查看NSMutableDictionary中1014个字符串中的一个字符串的部分。
模拟器中不会出现此错误。它只发生在iPhone上,有时它运行良好,但有时它会崩溃。
但是,在阅读堆栈跟踪之后,我在那里看到了CFDictionaryApplyFunction,所以我认为这可能是其中一个可能的原因。是因为在模拟器上,它读取的东西太快,以至于来自plist的整个字典都会立即加载,而在设备上,它读取速度较慢?老实说,我不知道字典是如何工作的。它是否会立即读取所有1014个字符串,或者是否使用其他线程缓慢读取?请指教。谢谢。
在iPhone上,内存相对较小,因此您更有可能获得内存警告。在模拟器上,尝试模拟内存警告(在硬件菜单项下找到选项)。 – notnoop 2009-08-08 13:52:51