苹果的多线程文档没有列出NSIndexPath
是否线程安全!作为一个不可变类,我通常期望它是线程安全的。
以前,我确信文档曾经说明过NSIndexPath
实例是共享的和全局唯一的。不过现在似乎已经消失了,这让我怀疑该设计是否在iOS5 / Mac OS X 10.7进行了修订。
我在Mac OS X 10.6(Snow Leopard)上看到很多客户崩溃报告,这些报告似乎是在尝试访问索引路径时崩溃的。因此,我想知道:实际的实例是否线程安全,而从共享缓存中取出它们的逻辑是否不安全?有人有什么见解吗?
顺便说一句,以下是一个示例堆栈跟踪:
Dispatch queue: com.apple.root.default-priority
0 libobjc.A.dylib 0x96513f29 _cache_getImp + 9
1 libobjc.A.dylib 0x965158f0 class_respondsToSelector + 59
2 com.apple.CoreFoundation 0x948bcb49 ___forwarding___ + 761
3 com.apple.CoreFoundation 0x948bc7d2 _CF_forwarding_prep_0 + 50
4 com.apple.Foundation 0x994b10c5 -[NSIndexPath compare:] + 93
5 com.apple.Foundation 0x99415686 _NSCompareObject + 76
6 com.apple.CoreFoundation 0x948af61c __CFSimpleMergeSort + 236
7 com.apple.CoreFoundation 0x948af576 __CFSimpleMergeSort + 70
8 com.apple.CoreFoundation 0x948af38c CFSortIndexes + 252
9 com.apple.CoreFoundation 0x948fe80d CFMergeSortArray + 125
10 com.apple.Foundation 0x994153d3 _sortedObjectsUsingDescriptors + 639
11 com.apple.Foundation 0x994150d8 -[NSArray(NSKeyValueSorting) sortedArrayUsingDescriptors:] + 566
在我看来,这是一个NSIndexPath
实例试图将自己与已释放的实例进行比较。
NSIndexPath
引起的崩溃并不一定意味着问题出在NSIndexPath
上。 - hamstergene