美文网首页潭州iOS课程
课程笔记:内存管理

课程笔记:内存管理

作者: 飘摇的水草 | 来源:发表于2021-01-18 18:29 被阅读0次

1、ARC下打印retainCount:NSLog(@"%ld",CFGetRetainCount((__bridge CFTypeRef)(obj)));
或者用[obj valueForKey:@"retainCount"];

2、解决timer引起的循环引用,在viewController里的didMoveToParentViewController里把timer置为nil,还有
另外一种方法是修改target,即:
_target = [[NSObject alloc] init];
class_addMethod([_target class], @selector(fire), class_getMethodImplementation([self class], @selector(fire)), "v@:");
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:_target selector:@selector(fire) userInfo:nil repeats:YES];
第三种方法是:
self.proxy = [XCProxy alloc];//没有init
self.proxy.target = self;
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self.proxy selector:@selector(fire) userInfo:nil repeats:YES];
第四种方法:iOS 10提供的下面方式
scheduledTimerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block

另外的定时方式有dispatch_source,CADisplayLink,主要是timer的精度不高

3、block里内部为什么要把weakSelf再变为strongSelf是因为weakSelf的有效期一般只有30秒,当网络比较慢的时候
weakSelf可能早已变成了nil,故要再变成strongSelf

相关文章

网友评论

    本文标题:课程笔记:内存管理

    本文链接:https://www.haomeiwen.com/subject/fhleaktx.html