zoukankan      html  css  js  c++  java
  • 封装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

  • 相关阅读:
    未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.ServiceModel.Activation.HttpModule”。
    服务代理的关闭与并发会话的限制
    批量插入数据利器之SqlBulkCopy
    VS 生成 dll、exe 版本号与SVN版本号一致
    DataTable / DataSet 与 xml 的相互转换
    C# 操作嵌入的资源
    【WCF安全】使用X509证书自定义验证
    预先生事件和后期生成命令事件
    (转)利用WPF的ListView进行大数据量异步加载
    (转)SQL知识_SqlParameter数组
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3983566.html
Copyright © 2011-2022 走看看