Apple's multithreading docs ¡no liste NSIndexPath
como seguro o no! Como una clase inmutable, generalmente espero que sea segura.¿NSIndexPath es seguro para hilos?
Anteriormente, estoy seguro de que la documentación utilizada para indicar que las instancias NSIndexPath
se compartían y eran únicas a nivel mundial. Eso parece haber desaparecido ahora, lo que me lleva a sospechar que el diseño fue revisado para iOS5/Mac OS X 10.7.
Veo bastantes informes de fallos de clientes en Mac OS X 10.6 (Snow Leopard) que parecen estar fallando al intentar acceder a una ruta de índice. Por lo tanto, me pregunto: ¿las instancias actuales son seguras, pero que la lógica para sacarlas de la memoria caché compartida no es así? ¿Alguien tiene alguna idea?
He aquí un ejemplo seguimiento de la pila Por cierto:
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
Para mí, esto es un ejemplo NSIndexPath
tratando de compararse a una instancia desasignado.
¿Qué hace con esas rutas de índice, y dónde ocurre el bloqueo? Los errores de subprocesamiento múltiple son misteriosos, un bloqueo con un 'NSIndexPath' no necesariamente significa que el problema está en' NSIndexPath'. – hamstergene
Ejecuto una solicitud de búsqueda y luego ordeno los resultados según su método '-indexPath'. Internamente, cada vez que se invoca, ese método crea una ruta de índice que representa la posición del objeto en el árbol. Sospecho que me están entregando compartidos 'NSIndexPath's que luego serán desasignados poco después en otro hilo. –
¿dónde se origina NSIndexPath? ¿Es una propiedad del objeto recuperado? –