利用NSProxy解决NSTimer内存泄漏问题

在iOS开发中经常使用到NSTimer,我们都知道NSTimer会对target retain一次,导致相互强引用target无法释放。我们可以消息转发代理NSProxy来解决NSTimer内存泄漏问题。
具体代码如下:

#import <Foundation/Foundation.h>

@interface TTWeakProxy : NSProxy

+ (instancetype)weakProxyWithTarget:(id)target;

@end
#import "TTWeakProxy.h"

@interface TTWeakProxy ()

@property (nonatomic, weak) id target;

@end

@implementation TTWeakProxy

+ (instancetype)weakProxyWithTarget:(id)target
{
    TTWeakProxy *weakProxy = [TTWeakProxy alloc];
    weakProxy.target = target;
    
    return weakProxy;
}

- (id)forwardingTargetForSelector:(SEL)selector {
    return _target;
}


- (void)forwardInvocation:(NSInvocation *)invocation
{
    void *nullPointer = NULL;
    [invocation setReturnValue:&nullPointer];
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    return [NSObject instanceMethodSignatureForSelector:@selector(init)];
}

@end

PS: 要记得在dealloc调用NSTimer的invalidate方法,把定时器从run loop中移除。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容