NSMapTable、NSHashTable与NSPointerArray的封装
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的封装的更多相关文章
- Cocoa 集合类型:NSPointerArray,NSMapTable,NSHashTable
iOS 中有很多种集合类型,最为常见的可能就 NSArray.NSDictionary.NSSet,但其实还有 NSPointerArray.NSMapTable.NSHashTable 等类型,虽然 ...
- iOS 开发知识小集(1)
iOS 开发知识小集(1) 2015-05-15 iOS大全 (点击上方蓝字,快速关注我们) 一直想做这样一个小册子,来记录自己平时开发.阅读博客.看书.代码分析和与人交流中遇到的各种问题.之前有过 ...
- NSHashTable NSPointerArray
NSHashTable和NSMapTable能够对持有的对象做strong或weak存储,弱持有weak引用对象,当weak对象释放后会自动从表中移除 http://blog.csdn.net ...
- NSHashtable and NSMaptable
本文转自Nidom的博客,原文:<NSHashtable & NSMaptable> NSSet, NSDictionary, NSArray是Foundation框架关于集合 ...
- ios NSHashTable & NSMapTable
在ios开发中大家用到更多的集合类可能是像NSSet或者NSDictionary,NSArray这样的.这里要介绍的是更少人使用的两个类,一个是NSMapTable,另一个是NSHashTable. ...
- 【转】NSHashtable and NSMaptable
本文转自Nidom的博客,原文:<NSHashtable & NSMaptable> NSSet, NSDictionary, NSArray是Foundation框架关于集合 ...
- NSHashTable 和 NSMapTable学习
今天,在实现play gif时间功能,我看见两个陌生班,只需看看这个纪录: NSSet和NSDictionary是两个经常使用的类,可是他们默认假定了当中对象的内存行为.对于NSSet.object是 ...
- 封装NSMapTable并简易的使用
封装NSMapTable并简易的使用 NSMapTable是弱引用的字典,可以用来存储对象,该对象消失了也没有关系,对于控制器越级跳转相当有用:) WeakDictionary.h 与 WeakDic ...
- NSDictionary和NSMaptable, NSArray,NSSet,NSOrderedSet和NSHashTable的区别
NSSet, NSDictionary, NSArray是Foundation框架关于集合操作的常用类, 和其他标准的集合操作库不同, 他们的实现方法对开发者进行隐藏, 只允许开发者写一些简单的代码, ...
随机推荐
- 高级网络功能(Docker支持的网络定制配置)
网络的高级知识,包括网络的启动和配置参数.DNS的使用配置.容器访问和端口映射的相关实现. 在一些具体场景中,Docker支持的网络定制配置,通过Linux命令来调整.补充.甚至替换Docker默认的 ...
- yum命令速查
1 yum的基本原理 CentOS可在yum服务器上下载官方网站给出的rpm给出的表头列表数据,该数据除了记载每个rpm软件的相依性之外,也说明了rpm所放置的容器(repository)所在.通过分 ...
- 笔记五:python字符串
一:学习内容 字符串类型 字符串类型判断 字符串类型互转 字符串小练习 二:字符串类型 1. basestring 在python中和字符串相关的数据类型为:str和unicode,他们都是bases ...
- Java数据库连接池原理与简易实现
1.什么是数据库连接池 我们现在在开发中一定都会用到数据库,为了提高我们的系统的访问速度,数据库优化是一个有效的途径.我们现在开发中使用数据库一般都要经历以下的四个步骤:(1)加载数据库的驱动类,(2 ...
- django2.1---上下文处理器
上下文处理器 上下文处理器是可以返回一些数据,在全局模板中都可以使用.比如登录后的用户信息,在很多页面中都需要使用,那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象. 在set ...
- Red Hat Linux 无法使用yum命令
一:首先提供部分Red Hat 镜像下载地址 1.rhel-server-6.8-i386-dvd.iso 链接: https://pan.baidu.com/s/18VqxRgBMuAJE7Ty0H ...
- CSS3 颜色属性
关键字颜色 red 十六进制颜色 #FF0000 RGB颜色 rgb(255,0,0) 新增的颜色表示方法 RGBa: RGB代表光的三原色,Red.Green和Blue CSS3中可以增加一个值 ...
- jQuery如何根据元素值删除数组元素
用到的方法$.inArry(); $.inArray( value, array [, fromIndex ] ) value 任意类型 用于查找的值. array Array类型 指定被查找的数组. ...
- git 入门学习
1. 分享一个我自己的百度网盘地址 链接:https://pan.baidu.com/s/17W7gpJNbqgBFy7VOl6-dvw 提取码:2a7t 2.安装就不说了,基本全默认就OK.安装完城 ...
- java并发编程的艺术(二)---重排序与volatile、final关键字
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...