NSProxy避免循环引用

@interface MyProxy: NSProxy
+ (instancetype)proxyWithTarget:(id)target;
@property (weak, nonatomic) id target;

@end
@implementation MyProxy

+ (instancetype)proxyWithTarget:(id)target{
      MyProxy *proxy = [MyProxy alloc];
      proxy.target = target;
      return proxy;
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    return [self.target methodSignatureForSelector:sel];
}

- (void)forwardInvocation:(NSInvocation *)invocation
{
    [invocation invokeWithTarget:self.target];
}
@end

调用

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:[MyProxy proxyWithTarget:self] selector:@selector(timerTest) userInfo:nil repeats:YES];

MyProxy *p = [MyProxy proxyWithTarget:self] ;
[p isKindOfClass:[self class]]; //返回1,因为内部消息转发到self

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

推荐阅读更多精彩内容