NSProxy

一般我们都使用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];

知道是为啥么?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。