一般我们都使用proxy来做消息转发的桥,或者是利用它来避免循环引用,timer等
但是针对支持iOS8的通知是否可以呢
先上代码
proxy.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface TTProxy : NSProxy
+ (TTProxy *)proxyWithTarget:(id)obj;
@end
NS_ASSUME_NONNULL_END
proxy.m
#import "TTProxy.h"
@interface TTProxy ()
@property (nonatomic,weak) id obj;
@end
@implementation TTProxy
+(TTProxy *)proxyWithTarget:(id)obj{
TTProxy * p = [TTProxy alloc];
p.obj = obj;
return p;
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector{
NSMethodSignature *sig = nil;
sig = [self.obj methodSignatureForSelector:aSelector];
return sig;
}
- (void)forwardInvocation:(NSInvocation *)anInvocation{
[anInvocation invokeWithTarget:self.obj];
}
@end
- 下面这种写法当前对象的funciton是可以响应的
TTProxy * tt = [TTProxy proxyWithTarget:self];
[[NSNotificationCenter defaultCenter] addObserver:tt selector:@selector(function) name:nil object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"123" object:nil];
- 下面这种写法当前对象的funciton是不能响应的,根本不回走消息转发
[[NSNotificationCenter defaultCenter] addObserver:[TTProxy proxyWithTarget:self] selector:@selector(function) name:nil object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"123" object:nil];
知道是为啥么?