标签:
今天,在实现play gif时间功能,我看见两个陌生班,只需看看这个纪录:
NSSet和NSDictionary是两个经常使用的类,可是他们默认假定了当中对象的内存行为。对于NSSet。object是强引用的,和NSDictionary中的value是一样的。而NSDictionary中的key则是copy的,因此当开发人员想要使NSSet的objects或者NSDictionary的values为weak,或者NSDictionary使用没有实现协议的对象作为key时,比較麻烦(须要使用NSValue的方法valueWithNonretainedObject)。
在iOS6和MAC OS X 10.5開始。提供了相对于NSSet和 NSDictionary 更通用的两个类 NSHashTable和 NSMapTable。
NSHashTable是比NSSet更通用的一个相似物。NSHashTable相对于 NSSet/NSMutableSet有例如以下特征:
? NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn]; ? [hashTable addObject:@"foo"]; ? [hashTable addObject:@"bar"]; ? [hashTable addObject:@"foo"]; ? [hashTable addObject:@42]; ? NSLog(@"Members: %@", [hashTable allObjects]);
id delegate = ...; NSMapTable *mapTable = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory valueOptions:NSMapTableWeakMemory]; [mapTable setObject:delegate forKey:@"foo"]; NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);
NSMapTable对象在初始化的时候使用options去分别指定keys和values的行为。
NSMapTableStrongMemory:指定相应的key或者value为强引用。 NSMapTableWeakMemory:指定相应的key或者value为弱引用。 NSMapTableCopyIn:指定相应的key或者value在增加到集合中的时候为copy。
NSMapTableObjectPointerPersonality:此选项是直接使用指针进行isEqual:和 hash 。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
标签:
原文地址:http://www.cnblogs.com/hrhguanli/p/4690046.html