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