我使用NSOperation子类创建图像;生成的线程用于创建在imageView中显示的图像。图像被设置为arraycontroller中的一个key,绑定到imageview。
用户随机报告应用程序崩溃,崩溃日志显示调用选择器_cacheSnapshotRep()的线程中出现错误;我自己无法重现此错误,在web搜索中也没有出现此错误。
以下是崩溃日志中的相关部分:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000000
Crashed Thread: 5 Dispatch queue: com.apple.root.default-priority
Application Specific Information:
objc_msgSend() selector name: _cacheSnapshotRep:和:
Thread 5 Crashed: Dispatch queue: com.apple.root.default-priority
0 libobjc.A.dylib 0x90008edb objc_msgSend + 27
1 com.apple.AppKit 0x962abd48 -[NSImage _usingBestRepresentationForRect:context:hints:body:] + 189
2 com.apple.AppKit 0x962ab87e -[NSImage drawInRect:fromRect:operation:fraction:respectFlipped:hints:] + 1939
3 com.apple.AppKit 0x962aa6a0 -[NSImage _drawMappingAlignmentRectToRect:withState:backgroundStyle:operation:fraction:flip:hints:] + 842
4 com.apple.AppKit 0x963bfb95 -[NSImageCell drawInteriorWithFrame:inView:] + 821
5 com.apple.AppKit 0x963bf7f9 -[NSImageCell drawWithFrame:inView:] + 2133
6 com.apple.AppKit 0x9635066a -[NSControl drawRect:] + 589
7 com.apple.AppKit 0x96348a99 -[NSView _drawRect:clip:] + 3510
8 com.apple.AppKit 0x969ae107 -[_NSViewDrawOperation main] + 257
9 com.apple.Foundation 0x9279c33b -[__NSOperationInternal start] + 811
10 com.apple.Foundation 0x9279bf61 ____startOperations_block_invoke_2 + 94
11 libSystem.B.dylib 0x922ac828 _dispatch_call_block_and_release + 16
12 libSystem.B.dylib 0x9229ea5c _dispatch_worker_thread2 + 222
13 libSystem.B.dylib 0x9229e4f1 _pthread_wqthread + 390
14 libSystem.B.dylib 0x9229e336 start_wqthread + 30我有点迷茫,不知道接下来该怎么做,所以任何建议都是非常感谢的。
发布于 2010-01-18 11:16:46
所以它看起来像是因为在我的子线程中使用了非线程安全类而导致的。
Apple's documentation很好地总结了线程安全规则。
发布于 2010-01-13 07:42:19
Exception Type: EXC_BAD_ACCESS (SIGBUS)在我看来,这是一个内存管理问题,NSZombieEnabled或Instruments应该可以帮助您找出错误所在,特别是如果您无法自己重现错误的话。
https://stackoverflow.com/questions/2053260
复制相似问题