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