Sì, è possibile utilizzare NSPointerFunctionsWeakMemory. Facebook KVOController utilizzare anche NSHashTable con tale opzione, vedere 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 ignored "-Wdeprecated-declarations"
_infos = [infos initWithOptions:NSPointerFunctionsZeroingWeakMemory|NSPointerFunctionsObjectPointerPersonality capacity:0];
#pragma clang diagnostic pop
}
#endif
_lock = OS_SPINLOCK_INIT;
}
return self;
}
Inoltre, per modo più conveniente, è possibile utilizzare weakObjectsHashTable
restituisce una nuova tabella di hash per memorizzare i riferimenti deboli al suo contenuto.
Return Value Una nuova tabella di hash che utilizza le opzioni NSHashTableZeroingWeakMemory e NSPointerFunctionsObjectPersonality ed ha una capacità iniziale di 0.
Il documento è un po 'vecchio, ma è vero. Vedere NSHipster NSHashTable & NSMapTable
NSHashTableZeroingWeakMemory: This option has been deprecated. Instead use the NSHashTableWeakMemory option
Si noti inoltre che
NSHashTableWeakMemory Uguale a NSPointerFunctionsWeakMemory
Si dovrebbe notare che NSHashTable è disponibile solo in OSX e non iOS. –
@SandyChapman 'NSHashTable' è disponibile su iOS dal 6.0. Controlla l'intestazione 'NSHashTable.h'. – TylerTheCompiler
@DrBeardface Interessante che [i documenti] (https://developer.apple.com/library/mac/documentation/cocoa/reference/NSHashTable_class/Introduction/Introduction.html) non dice che è supportato allora. ** MODIFICA: ** Sembra che sto guardando i documenti sbagliati. [Questo] (https://developer.apple.com/library/ios/documentation/cocoa/reference/NSHashTable_class/Introduction/Introduction.html) dice che è supportato. –