NSMapTable、NSHashTable与NSPointerArray的封装

说明

NSMapTable对应NSDictionary;NSHashTable对应NSSet;NSPointerArray对应NSArray,本人通过装饰设计模式对他们的使用进行了封装。

源码

https://github.com/YouXianMing/WeakList

//
//  WeakDictionary.h
//  IteratorPattern
//
//  Created by YouXianMing on 15/9/12.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import <Foundation/Foundation.h>@interface WeakDictionary : NSObject/***  元素个数*/
@property (readonly) NSUInteger count;/***  获取对象**  @param aKey**  @return 对象*/
- (id)objectForKey:(id)aKey;/***  根据键值移除对象**  @param aKey 键值*/
- (void)removeObjectForKey:(id)aKey;/***  添加对象**  @param anObject 对象*  @param aKey     键值*/
- (void)setObject:(id)anObject forKey:(id)aKey;/***  键值枚举器**  @return 枚举器*/
- (NSEnumerator *)keyEnumerator;/***  对象枚举器**  @return 对象枚举器*/
- (NSEnumerator *)objectEnumerator;/***  移除所有对象*/
- (void)removeAllObjects;/***  返回字典**  @return 字典*/
- (NSDictionary *)dictionaryRepresentation;@end
//
//  WeakDictionary.m
//  IteratorPattern
//
//  Created by YouXianMing on 15/9/12.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import "WeakDictionary.h"@interface WeakDictionary () {NSMapTable  *_mapTable;
}@end@implementation WeakDictionary- (instancetype)init {self = [super init];if (self) {_mapTable = [NSMapTable strongToWeakObjectsMapTable];}return self;
}- (id)objectForKey:(id)aKey {return [_mapTable objectForKey:aKey];
}- (void)removeObjectForKey:(id)aKey {[_mapTable removeObjectForKey:aKey];
}- (void)setObject:(id)anObject forKey:(id)aKey {[_mapTable setObject:anObject forKey:aKey];
}- (NSEnumerator *)keyEnumerator {return [_mapTable keyEnumerator];
}- (NSEnumerator *)objectEnumerator {return [_mapTable objectEnumerator];
}- (void)removeAllObjects {[_mapTable removeAllObjects];
}- (NSDictionary *)dictionaryRepresentation {return [_mapTable dictionaryRepresentation];
}@synthesize count = _count;
- (NSUInteger)count {return _mapTable.count;
}- (NSString *)description {return [NSString stringWithFormat:@"%@", _mapTable.dictionaryRepresentation];
}@end
//
//  WeakSet.h
//  IteratorPattern
//
//  Created by YouXianMing on 15/9/12.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import <Foundation/Foundation.h>@interface WeakSet : NSObject/***  元素个数*/
@property (readonly)            NSUInteger  count;/***  所有对象*/
@property (readonly, copy)      NSArray    *allObjects;/***  获取一个对象*/
@property (readonly, nonatomic) id          anyObject;/***  获取集合*/
@property (readonly, copy)      NSSet      *setRepresentation;- (id)member:(id)object;
- (NSEnumerator *)objectEnumerator;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;
- (void)removeAllObjects;
- (BOOL)containsObject:(id)anObject;@end
//
//  WeakSet.m
//  IteratorPattern
//
//  Created by YouXianMing on 15/9/12.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import "WeakSet.h"@interface WeakSet () {NSHashTable  *_hashTable;
}@end@implementation WeakSet- (instancetype)init {self = [super init];if (self) {_hashTable = [NSHashTable weakObjectsHashTable];}return self;
}- (id)member:(id)object {return [_hashTable member:object];
}- (NSEnumerator *)objectEnumerator {return [_hashTable objectEnumerator];
}- (void)addObject:(id)object {[_hashTable addObject:object];
}- (void)removeObject:(id)object {[_hashTable removeObject:object];
}- (void)removeAllObjects {[_hashTable removeAllObjects];
}- (BOOL)containsObject:(id)anObject {return [_hashTable containsObject:anObject];
}@synthesize count = _count;
- (NSUInteger)count {return _hashTable.count;
}@synthesize allObjects = _allObjects;
- (NSArray *)allObjects {return [_hashTable allObjects];
}@synthesize anyObject = _anyObject;
- (id)anyObject {return [_hashTable anyObject];
}@synthesize setRepresentation = _setRepresentation;
- (NSSet *)setRepresentation {return [_hashTable setRepresentation];
}- (NSString *)description {return [NSString stringWithFormat:@"%@", _hashTable.allObjects];
}@end
//
//  WeakArray.h
//  IteratorPattern
//
//  Created by YouXianMing on 15/9/12.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import <Foundation/Foundation.h>@interface WeakArray : NSObject@property (readonly, copy) NSArray    *allObjects;
@property (readonly)       NSUInteger  count;- (id)objectAtIndex:(NSUInteger)index;
- (void)addObject:(id)object;
- (void)removeObjectAtIndex:(NSUInteger)index;
- (void)insertObject:(id)object atIndex:(NSUInteger)index;
- (void)replaceObjectAtIndex:(NSUInteger)index withPointer:(id)object;
- (void)compact;@end
//
//  WeakArray.m
//  IteratorPattern
//
//  Created by YouXianMing on 15/9/12.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//#import "WeakArray.h"@interface WeakArray () {NSPointerArray *_pointerArray;
}@end@implementation WeakArray- (instancetype)init {self = [super init];if (self) {_pointerArray = [NSPointerArray pointerArrayWithOptions:NSPointerFunctionsWeakMemory];}return self;
}- (id)objectAtIndex:(NSUInteger)index {return [_pointerArray pointerAtIndex:index];
}- (void)addObject:(id)object {[_pointerArray addPointer:(__bridge void *)(object)];
}- (void)removeObjectAtIndex:(NSUInteger)index {[_pointerArray removePointerAtIndex:index];
}- (void)insertObject:(id)object atIndex:(NSUInteger)index {[_pointerArray insertPointer:(__bridge void *)(object) atIndex:index];
}- (void)replaceObjectAtIndex:(NSUInteger)index withPointer:(id)object {[_pointerArray replacePointerAtIndex:index withPointer:(__bridge void *)(object)];
}- (void)compact {[_pointerArray compact];
}@synthesize count = _count;
- (NSUInteger)count {return _pointerArray.count;
}- (NSString *)description {return [NSString stringWithFormat:@"%@", _pointerArray.allObjects];
}@synthesize allObjects = _allObjects;
- (NSArray *)allObjects {return _pointerArray.allObjects;
}@end

使用

NSMapTable、NSHashTable与NSPointerArray的封装相关推荐

  1. 技术干货 | iOS 高阶容器详解

    导读:近期,在面试 iOS 工程师的过程中,当我问到候选人小伙伴都了解哪些 iOS 容器类型时,大多数小伙伴能给出的答复就是NSArray.NSDictionary 和 NSSet以及对应的可变类型, ...

  2. iOS之深入解析高阶容器的原理和应用

    一.前言 我们都知道 iOS 提供了三种主要的容器类型,它们分别是 Array.Set 和 Dictionary,用来存储一组值: Array:存储一组有序的值: Set:存储一组无序的.不重复的值: ...

  3. NSHashTable and NSMapTable

    NSSet和NSDictionary是两个常用的类,但是他们默认假定了其中对象的内存行为.对于NSSet,object是强引用的,和NSDictionary中的value是一样的.而NSDiction ...

  4. [转] NSMapTable 不只是一个能放weak指针的 NSDictionary

    NSMapTable 不只是一个能放weak指针的 NSDictionary NSMapTable是早在Mac OS X 10.5(Leopard)的引入集合类.乍一看,这似乎是作为一个替换NSDic ...

  5. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  6. 2022-2028年中国封装用胶膜行业运营现状及投资发展潜力报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了封装用胶膜行业相关概述.中国封装用胶膜行业运行环境.分析了中国封装用 ...

  7. 第十六节,使用函数封装库tf.contrib.layers

    目录 一 tf.contrib.layers中的具体函数介绍 1.tf.contrib.layers.conv2d()函数的定义如下: 2.tf.contrib.layers.max_pool2d() ...

  8. 薄膜封装,等离子体技术,原子层沉积,化学气相沉积

    薄膜封装,等离子体技术,原子层沉积,化学气相沉积 薄膜封装 薄膜封装概念 薄膜真空沉积的一个很重要的技术应用就是薄膜封装.人们对薄膜封装最简单的认识就是日常生活中最常见的保鲜膜,水氧渗透率大约是1-1 ...

  9. 为什么要使用Retrofit封装OkHttp,而不单独使用OkHttp?

    OkHttp的优点: 开源的轻量级框架.高效.快速的请求客户端,可以单独使用它来实现网络请求. 支持SPDY: 支持连接池,可极大减少延时: 支持Gzip压缩响应体,降低传输内容的大小: 支持Http ...

最新文章

  1. java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
  2. 电脑壁纸励志_励志壁纸 | 要乖 要长大 要努力 要不负众望
  3. 百度被曝将成立芯片公司!头部互联网玩家,为何纷纷入局造芯?
  4. 努比亚红魔有人脸识别_魅族魅蓝6T、努比亚红魔Mars电竞手机、华为畅享10Plus对比...
  5. 今晚直播 | 双边分支网络BBN:攻坚长尾分布的现实世界任务
  6. Zabbix监控可视化
  7. 表白代码c语言_这段代码怎么啦?居然瞬间引起了所有程序员网友的注意!
  8. java中的几种泛型类——HashSet、HashMap、TreeSet、TreeMap,遍历map,排序,HashTable比较
  9. 【全网最全】一文搞定 Linux 压缩、解压哪些事儿
  10. 精通Android自定义View(十)绘制篇Canvas分析之绘制Path
  11. c语言表达式10 6的结果,C语言表达式(++i)+(++i)+(++i)结果多少?
  12. js控制文件拖拽,获取拖拽内容。
  13. 【廖雪峰官方网站/Java教程】反射
  14. 怎么样更好的做好站内的优化
  15. PHP设计模式——抽象工厂
  16. 火山PC锐浪报表使用教程1(Grid++Report)
  17. 系统组件:工具栏Toolbar
  18. DVFS--动态电压频率调整
  19. 浅谈Android Contacts数据库phone_lookup表的设计
  20. JS中的NaN和isNaN

热门文章

  1. python一个星期可以入门吗_Python一星期入门第6篇: 模块和包
  2. linux apach2 内存,Apache2.2.14(Ubuntu)修改最大连接数
  3. java的write无法写入,Java加载ImageIO.write的文件在.jar中不起作用
  4. python办公室妙用-python eval()函数的妙用和滥用
  5. 高考计算机专业最低分数线是多少,2021最低多少分可以稳上二本 高考二本分数线是多少...
  6. visio 图标_visio有效提升工作效率
  7. typescript 方法后面加感叹号_typescript专题(四) 「泛型」
  8. centos8共享文件夹挂载_linux挂载群辉的NFS共享文件夹
  9. Git三种报错:E325: ATTENTION、Please enter the commit message for your changes、Timed out
  10. Linux 系统编程技巧与概念 第11章 不透明指针