美文网首页iOS归纳
iOS面试题-block

iOS面试题-block

作者: wrootlflvl | 来源:发表于2019-03-30 16:14 被阅读0次

    block的内存管理

    无论当前环境是ARC还是MRC,只要block没有访问外部变量,block始终在全局区

    MRC情况下:

        block如果访问外部变量,block在栈里

        不能对block使用retain,否则不能保存在堆里

        只有使用copy才能放到堆里

    ARC情况下:

        block如果访问外部变量,block在堆里

        block可以使用copy和strong,并且block是一个对象

    block循环引用

    如果要在block中直接使用外部强指针会发生错误,使用以下代码在block外部实现可用解决

    __weak typeof(self) weakSelf = self;

    但是如果在block内部使用延时操作还使用弱指针的话会取不到该弱指针,需要在block内部再将弱指针强引用一下

    __strong typeof(self) strongSelf = weakSelf;

    block的变量传递

    如果block访问的外部变量是局部变量,那么就是值传递,外界改了,不会影响里面

    如果block访问的外部变量是__block或者static修饰,或者是全局变量,那么就是指针传递,block里面的值和外界同一个变量,外界改变,里面也会改变

    使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 repeats:YES callback:^() {

        weakSelf.secondsLabel.text = ...

    }];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

    使用block和使用delegate实现委托模式有什么优点?

    使用block实现委托模式,其优点是回调的block代码块定义在委托对象函数内部,使代码更为紧凑

    适配对象不再需要实现具体某个protocol,代码更为简洁

    相关文章

      网友评论

        本文标题:iOS面试题-block

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