首页 > 代码库 > 让两个对象间建立weak关系

让两个对象间建立weak关系

让两个对象间建立weak关系

这是为了给两个对象间建立weak关系,当一个对象被释放时,另外一个对象再获取这个值时就是nil,也就是不持有这个对象:)

源码:

WeakRelatedDictionary.h 与 WeakRelatedDictionary.m

////  WeakRelatedDictionary.h//  TestDemo////  Created by YouXianMing on 14-9-25.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <Foundation/Foundation.h>@interface WeakRelatedDictionary : NSObject+ (void)addObject:(id)object forKey:(id)key;+ (id)objectForKey:(id)key;@end
////  WeakRelatedDictionary.m//  TestDemo////  Created by YouXianMing on 14-9-25.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "WeakRelatedDictionary.h"static NSMapTable  *weakDictionary = nil;@implementation WeakRelatedDictionary+ (void)initialize{    if (self == [WeakRelatedDictionary class])    {        // 弱引用object弱引用object        weakDictionary = [NSMapTable weakToWeakObjectsMapTable];    }}+ (void)addObject:(id)object forKey:(id)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:(id)key{    return [weakDictionary objectForKey:key];}@end

NSObject+WeakRelated.h 与 NSObject+WeakRelated.m

////  NSObject+WeakRelated.h//  ScrollViewShowImage////  Created by YouXianMing on 14-9-24.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <Foundation/Foundation.h>@interface NSObject (WeakRelated)// 与对象弱相关联系- (void)setRelatedObject:(id)object;// 取出建立关系的对象- (id)relatedObject;@end
////  NSObject+WeakRelated.m//  ScrollViewShowImage////  Created by YouXianMing on 14-9-24.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "NSObject+WeakRelated.h"#import "WeakRelatedDictionary.h"@implementation NSObject (WeakRelated)- (void)setRelatedObject:(id)object{    [WeakRelatedDictionary addObject:object forKey:self];}- (id)relatedObject{    return [WeakRelatedDictionary objectForKey:self];}@end

测试代码:

Model.h 与 Model.m

////  Model.h//  ObjectRelated////  Created by YouXianMing on 14-9-27.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <Foundation/Foundation.h>@interface Model : NSObject@end
////  Model.m//  ObjectRelated////  Created by YouXianMing on 14-9-27.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "Model.h"@implementation Model@end

ViewController.m

////  ViewController.m//  ObjectRelated////  Created by YouXianMing on 14-9-27.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "NSObject+WeakRelated.h"#import "WeakRelatedDictionary.h"#import "Model.h"@interface ViewController ()@property (nonatomic, strong) Model *model;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        _model             = [Model new];    self.relatedObject = _model;        NSLog(@"%@", self.relatedObject);        [self performSelector:@selector(showInfo) withObject:nil afterDelay:3];}- (void)showInfo{    _model = nil;    NSLog(@"%@", self.relatedObject);}@end

 

让两个对象间建立weak关系