美文网首页
IOS中Block总结

IOS中Block总结

作者: subite0 | 来源:发表于2017-04-10 15:47 被阅读0次

    1.block分为 

          (1).NSGlobalBlock:类似函数,位于text段;(没有引用外部变量的block,NSGlobalBlock的copy和retain是无效)

          (2).NSStackBlock:位于栈内存,函数返回后Block将无效;(引用外部的block,局部的NSStackBlock返回时在MRC下报错,在ARC下会自动加上copy)

          (3).NSMallocBlock:位于堆内存。(copy后的block都是NSMallocBlock,增加引用计数)

    二. block在ARC和非ARC下__block作用

        在MRC下 __block不会retain变量,只是让block不占有变量可以避免循环引用,类似ARC下的__weak

        在ARC下 __block修饰变量,会retain变量,避免不了循环引用。要用__weak避免循环引用。

        用__block时相当于提升了变量的作用域,相当于是static和全局变量作用。

    三.block其他

       copy块时,会把block中用引用的外部加__block修饰int float变量copy到栈上,用到object会复制到堆上,当多次copy次block时变量只copy一次。(没加__block的变量会作为实参传到block底部函数中,此变量非彼变量,函数返回后block内变量仍可用)

        block外部用__weak避免循环引用在block内用__strong修饰可以在block对变量强引用,避免了变量提前释放。

        block声明时必须用copy,这样声明的block属性是NSMallocBlock在dealloc销毁,其他属性声明时相当于block是在栈上声明,局部使用完就会销毁block,里面的对象也会被释放。

    四.block示例

    相关文章

      网友评论

          本文标题:IOS中Block总结

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