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

  • 相关阅读:
    Web开发中的服务器跳转与客户端跳转
    Linux设置程序开机自启动
    RedHat Linux6.4下安装apache服务
    FTP错误 [ftp: connect: No route to host] 解决方法
    虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)
    工作中常用的Linux命令:mkdir命令
    工作中常用的Linux命令:crontab命令
    工作中常用的Linux命令:目录
    工作中常用的Linux命令:ipcs/ipcrm命令
    【CentOS】在Centos7 下无图形界面安装 Oracle11g
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3983566.html
Copyright © 2020-2023  润新知