潭州iOS课程

课程笔记:内存管理

2021-01-18  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读