内存管理

2020-07-07  本文已影响0人  化二缺

面试题

image.png

CADisplayLink,NSTimer 使用注意点

 //MARK: 方式1
    __weak typeof(self) weakSelf = self;
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
      [weakSelf timerTest];
    }];
    
    //MARK:方式2 中间对象
   self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:[YZProxy proxyWithTarget:self] selector:@selector(timerTest) userInfo:nil repeats:YES];
    
    //MARK:方式3 NSProxy 是少数没有继承 NSObject 的NS对象 但是又遵循 <NSObject>协议
       self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:[YZProxy2 proxyWithTarget:self] selector:@selector(timerTest) userInfo:nil repeats:YES];
    YZProxy * proxy1 = [YZProxy proxyWithTarget:self];
    YZProxy2 * proxy2 = [YZProxy2 proxyWithTarget:self];
    
    //0 1 YZProxy2 NSProxy直接进行消息转发了 所以 2结果是输出1 
    NSLog(@"%d %d",[proxy1 isKindOfClass:[self class]],
          [proxy2 isKindOfClass:[self class]]);

    

GCD定时器

内存布局

image.png
image.png

Tagged Pointer

MRC

Copy

拷贝的目的:产生一个副本对象,跟源对象互不影响
iOS提供了2个拷贝方法
copy 情况下需要注意的内存管理
深拷贝 浅拷贝

如果是一个可变对象 无论是copy还是 mutableCopy 都是深拷贝
如果是一个不可变对象 copy 是浅拷贝 mutableCopy 是深拷贝


image.png
image.png

引用计数

weak指针的原理

对象有个弱引用表,巴拉巴拉

autorelease

image.png image.png

巴拉巴拉。。

autorelease 和 Runloop


抽象 无聊 无用 易忘 面试 扯屁

上一篇 下一篇

猜你喜欢

热点阅读