关联引用的参数对象的释放取决于与它关联的那个对象的释放。
建立一个观察类:
#import <Foundation/Foundation.h>
const char kWatcher;
@interface Watcher : NSObject
@end#import "Watcher.h"
@implementation Watcher
- (void)dealloc{
NSLog(@"The thing I was watching is going away!");
}
@end测试代码:
objc_setAssociatedObject(self, &kWatcher, [Watcher new], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSMutableArray *arr = [NSMutableArray array];
NSArray *array = [NSArray arrayWithObject:@"888"];
objc_setAssociatedObject(arr, &kWatcherKey, [Watcher new], OBJC_ASSOCIATION_RETAIN_NONATOMIC);当self或arr释放的时候,所关联的值([Watcher new]生成的),也会释放,调用- (void)dealloc{
NSLog(@"The thing I was watching is going away!");
}所以起到了监听对象销毁的目的。
本文介绍如何使用Objective-C的关联对象来实现对象监听机制。通过创建一个简单的观察者类Watcher并利用objc_setAssociatedObject方法将观察者实例与目标对象关联起来,当目标对象被释放时,观察者会收到通知并执行相应的dealloc方法。
1万+

被折叠的 条评论
为什么被折叠?



