封装NSMapTable并简易的使用

简介:

封装NSMapTable并简易的使用

NSMapTable是弱引用的字典,可以用来存储对象,该对象消失了也没有关系,对于控制器越级跳转相当有用:)

WeakDictionary.h 与 WeakDictionary.m

//
//  WeakDictionary.h
//  弱引用字典
//
//  http://www.cnblogs.com/YouXianMing/
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <Foundation/Foundation.h>

#define GET_WEAK_OBJECT(key)                 [WeakDictionary objectForKey:(key)]
#define REGISTER_WEAK_OBJECT(object, key)    [WeakDictionary addObject:(object) forKey:(key)]

@interface WeakDictionary : NSObject

+ (void)addObject:(id)object forKey:(NSString *)key;
+ (id)objectForKey:(NSString *)key;

@end


//
//  WeakDictionary.m
//  弱引用字典
//
//  http://www.cnblogs.com/YouXianMing/
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "WeakDictionary.h"

static NSMapTable  *weakDictionary = nil;

@implementation WeakDictionary

+ (void)initialize
{
    if (self == [WeakDictionary class])
    {
        // 强引用key值弱引用object
        weakDictionary = [NSMapTable strongToWeakObjectsMapTable];
    }
}

+ (void)addObject:(id)object forKey:(NSString *)key
{
    if (object == nil || key == nil)
    {
        NSLog(@"object or key should not be nil.");
        return;
    }
    
    if ([weakDictionary objectForKey:key] == nil)
    {
        [weakDictionary setObject:object forKey:key];
    }
}

+ (id)objectForKey:(NSString *)key
{
    return [weakDictionary objectForKey:key];
}

@end

提供的两个category

NSObject+WeakDictionary.h 与 NSObject+WeakDictionary.m

//
//  NSObject+WeakDictionary.h
//  YouXianMing
//
//  Created by YouXianMing on 14-9-20.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSObject (WeakDictionary)

- (void)storeToWeakDictionaryWithKey:(NSString *)key;

@end


//
//  NSObject+WeakDictionary.m
//  YouXianMing
//
//  Created by YouXianMing on 14-9-20.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSObject+WeakDictionary.h"
#import "WeakDictionary.h"

@implementation NSObject (WeakDictionary)

- (void)storeToWeakDictionaryWithKey:(NSString *)key
{
    [WeakDictionary addObject:self forKey:key];
}

@end

NSString+WeakDictionary.h 与 NSString+WeakDictionary.m
//
//  NSString+WeakDictionary.h
//  YouXianMing
//
//  Created by YouXianMing on 14-9-20.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (WeakDictionary)

- (id)recoverFromWeakDictionary;

@end


//
//  NSString+WeakDictionary.m
//  YouXianMing
//
//  Created by YouXianMing on 14-9-20.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSString+WeakDictionary.h"
#import "WeakDictionary.h"

@implementation NSString (WeakDictionary)

- (id)recoverFromWeakDictionary
{
    return [WeakDictionary objectForKey:self];
}

@end

使用示例的话,以上一篇教程为例子来演示: http://www.cnblogs.com/YouXianMing/p/3983530.html

目录
相关文章
|
6月前
|
存储 Cloud Native 安全
C++ 封装成库
C++ 封装成库
|
6月前
|
JavaScript API
接口封装如何实现?
接口封装如何实现?
|
8月前
|
Java 数据挖掘 数据库
封装的理解
封装的理解
71 0
|
5天前
|
安全 C#
C#封装详解
C#封装详解
6 0
|
1月前
|
安全 数据安全/隐私保护
什么是封装?
什么是封装?
|
5月前
|
JavaScript 前端开发 Java
什么是封装?为什么是要封装?
什么是封装?为什么是要封装?
77 0
|
9月前
|
程序员
封装(了解一下)
封装(了解一下)
58 0
|
9月前
手动封装callES6
手动封装callES6
26 0
|
缓存
DiskCacheDir 的封装
DiskCacheDir 的封装