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

原文地址:https://www.cnblogs.com/YouXianMing/p/3983566.html