NSHashTable con refrencias débiles

Quiero usar una NSHashTable para save references débiles a los objects contenidos. Con respecto a otros comportamientos personalizables (incluida la verificación de igualdad), quiero el mismo comportamiento exacto que NSSet (por lo que prácticamente quiero tener un NSSet con references débiles). ¿Me puede dar un ejemplo sobre cómo inicializar una tabla de hash?

Sería suficiente lo siguiente: [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]

¿También NSHashTable con references débiles eliminará automáticamente los objects desasignados?

Gracias.

Sí, puede usar NSPointerFunctions WeakMemory. Facebook KVOController también usa NSHashTable con esa opción, vea KVOController

 - (instancetype)init { self = [super init]; if (nil != self) { NSHashTable *infos = [NSHashTable alloc]; #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED _infos = [infos initWithOptions:NSPointerFunctionsWeakMemory|NSPointerFunctionsObjectPointerPersonality capacity:0]; #elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) if ([NSHashTable respondsToSelector:@selector(weakObjectsHashTable)]) { _infos = [infos initWithOptions:NSPointerFunctionsWeakMemory|NSPointerFunctionsObjectPointerPersonality capacity:0]; } else { // silence deprecated warnings #pragma clang diagnostic push #pragma clang diagnostic ignonetworking "-Wdeprecated-declarations" _infos = [infos initWithOptions:NSPointerFunctionsZeroingWeakMemory|NSPointerFunctionsObjectPointerPersonality capacity:0]; #pragma clang diagnostic pop } #endif _lock = OS_SPINLOCK_INIT; } return self; } 

Además, para una forma más conveniente, puede usar weakObjectsHashTable

Devuelve una nueva tabla hash para almacenar references débiles a sus contenidos.

Valor devuelto Una nueva tabla hash que utiliza las opciones NSHashTableZeroingWeakMemory y NSPointerFunctionsObjectPersonality y tiene una capacidad inicial de 0.

El documento es un poco viejo, pero es cierto. Consulte la tabla NSHash Table NSHash y NSHipster

 NSHashTableZeroingWeakMemory: This option has been deprecated. Instead use the NSHashTableWeakMemory option 

Tenga en count también que

NSHashTableWeakMemory igual a NSPointerFunctions WeakMemory