Apple's multithreading docs non elencare NSIndexPath
come thread-safe o no! Come classe immutabile, generalmente mi aspetterei che fosse infallibile.NSIndexPath è thread-safe?
Precedentemente, sono sicuro che la documentazione utilizzata per indicare che le istanze NSIndexPath
erano condivise e globalmente univoche. Adesso sembra che sia scomparso, portandomi a sospettare che il design sia stato rivisto per iOS5/Mac OS X 10.7.
Sono molti i rapporti sugli arresti anomali dei clienti su Mac OS X 10.6 (Snow Leopard) che sembrano bloccati nel tentativo di accedere a un percorso dell'indice. Quindi mi chiedo: le istanze attuali sono thread safe, ma la logica per estrarle dalla cache condivisa non lo è? Qualcuno ha qualche intuizione?
Ecco un esempio di stack trace BTW:
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
Per me, questo è un esempio NSIndexPath
cercando di confrontarsi a un'istanza deallocato.
Cosa si fa con questi percorsi di indice e dove si verifica l'arresto anomalo? Gli errori di multithreading sono misteriosi, un crash con un 'NSIndexPath' non significa necessariamente che il problema sia in' NSIndexPath'. – hamstergene
Eseguo una richiesta di recupero e quindi ordinai i risultati in base al loro metodo '-indexPath'. Internamente, ogni volta che viene chiamato, quel metodo crea un percorso indice che rappresenta la posizione dell'oggetto nell'albero. E 'il mio sospetto che mi vengano consegnati 'NSIndexPath' condivisi che verranno poi rilasciati poco dopo su un'altra discussione. –
dove si trova NSIndexPath? È una proprietà dell'oggetto recuperato? –