封装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月前
|
JavaScript API
接口的封装
接口的封装
|
存储 Cloud Native 安全
C++ 封装成库
C++ 封装成库
|
Java 数据挖掘 数据库
封装的理解
封装的理解
104 0
|
2月前
|
数据安全/隐私保护 C语言 C++
C++(七)封装
本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
|
5月前
什么是封装?为什么是要封装?
什么是封装?为什么是要封装?
133 0
|
6月前
|
安全 C#
C#封装详解
C#封装详解
73 0
|
6月前
|
安全 数据安全/隐私保护
什么是封装?
什么是封装?
40 0
|
6月前
|
测试技术 API
(接口封装)
(接口封装)
97 0
|
程序员
封装(了解一下)
封装(了解一下)
94 0