首页 > 代码库 > 让两个对象间建立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关系
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。