标签:style blog http color io os 使用 ar for
今天在实现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 。
标签:style blog http color io os 使用 ar for
原文地址:http://blog.csdn.net/jijunyuan/article/details/39962923