码迷,mamicode.com
首页 > 其他好文 > 详细

NSMapTable、NSHashTable与NSPointerArray的封装

时间:2015-09-12 18:54:23      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

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的封装

标签:

原文地址:http://www.cnblogs.com/YouXianMing/p/4803290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!