iOS开发(13)内存管理

2019-04-02  本文已影响0人  迷心迷

一、定时器的内存

1、CADisplayLink、NSTimer使用注意

__weak typeof(self) weakSelf = self;
 
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
        [weakSelf timerTest];
    }];

使用代理对象(NSProxy)

+ (instancetype)proxyWithTarget:(id)target
{
    // NSProxy对象不需要调用init,因为它本来就没有init方法
    BDProxy *proxy = [self alloc];
    proxy.target = target;
    return proxy;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    return [self.target methodSignatureForSelector:sel];
}

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

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

2、GCD定时器

二、内存布局

1、iOS程序的内存布局

2、Tagged Pointer

3、判断是否为Tagged Pointer


5.png 6.png

4、思考以下2段代码能发生什么事?有什么区别?


7.png

三、对象的内存管理

1、OC对象的内存管理

8.png 9.png

2、copy和mutableCopy


10.png

3、引用计数的存储

4、dealloc
当一个对象要释放时,会自动调用dealloc,接下的调用轨迹是
dealloc
_objc_rootDealloc
rootDealloc
object_dispose
objc_destructInstance、free


12.png

四、自动释放池

1、自动释放池

2、AutoreleasePoolPage的结构

3、Runloop和Autorelease

面试题

1、使用CADisplayLink、NSTimer有什么注意点?

2、介绍下内存的几大区域

3、讲一下你对 iOS 内存管理的理解

4、ARC 都帮我们做了什么?
LLVM + Runtime

5、weak指针的实现原理

6、autorelease对象在什么时机会被调用release

7、方法里有局部对象, 出了方法后会立即释放吗

上一篇下一篇

猜你喜欢

热点阅读