Apple's multithreading docsNSIndexPath
をスレッドセーフとして登録しないでください!不変のクラスとして、私は一般にスレッドセーフであると期待しています。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
フェッチ要求を実行し、結果を '-indexPath'メソッドに基づいてソートします。内部的には、呼び出されるたびに、そのメソッドはツリー内のオブジェクトの位置を表すインデックスパスを作成します。私は、共有された 'NSIndexPath'を手渡していて、別のスレッドですぐに割り当てを解除されているのではないかと私は疑います。 –
どこからNSIndexPathが発信されますか?フェッチされたオブジェクトのプロパティですか? –