Apple のマルチスレッド ドキュメント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
自分自身を割り当て解除されたインスタンスと比較しようとしているインスタンスです。