美文网首页
iOS 中使用 block 相关

iOS 中使用 block 相关

作者: 昵什么称 | 来源:发表于2017-05-16 12:08 被阅读0次

、block 修饰词需要使用 copy 把保存在栈中的 blcok 拷贝到堆中,因为如果是保存在栈中的block,他会随着函数调用结束被销毁。从而导致我们在执行一个包含block的函数之后,就无法再访问这个block。因为(函数结束,函数栈就销毁了,存在函数里面的block也就没有了),我们再使用block时,就会产生空指针异常。如果是堆中的block,也就是copy修饰的block。他的生命 周期就是随着对象的销毁而结束的。只要对象不销毁,我们就可以调用的到在堆中的block。
、在声明block属性时需要确认在调用block时另一个线程有没有可能去修改block,如果确定不会有这种情况发生的话,那么block属性声明可以用nonatomic。如果不肯定的话,那么首先需要声明block属性为atomic,但是有了atomic来保证基本的原子性还是没有达到线程安全的,接着在调用时需要把block先赋值给本地变量,以防止block突然改变。
、如果在 block 中使用外部变量需要使用__block关键字,提到__block就要明白在 block 的使用中__block__weak的区别。
1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
3.__block对象可以在block中被重新赋值,__weak不可以。
4.__block对象在ARC下可能会导致循环引用,非ARC下会避免循环引用,__weak只在ARC下使用,可以避免循环引用。
PS:__unsafe_unretained修饰符可以被视为iOS SDK 4.3以前版本的__weak的替代品,不过不会被自动置空为nil。所以尽可能不要使用这个修饰符。

相关文章

  • Block 初见

    Block 初见 介绍 iOS block 的相关知识 目录 Block 背景知识 Block 使用方式 Bloc...

  • block编程, __block, __weak, __stro

    参考:block编程iOS __weak和__strong在Block中的使用__block & __weak &...

  • iOS Block存储域及循环引用

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block __block说明符...

  • iOS Block实现原理

    系列文章:iOS Block概念、语法及基本使用iOS Block __block说明符iOS Block存储域及...

  • iOS 中使用 block 相关

    一、block 修饰词需要使用 copy 把保存在栈中的 blcok 拷贝到堆中,因为如果是保存在栈中的block...

  • block 实用小例子

    本篇是简单介绍iOS 开发中block的使用(附demo): /* 声明一个block (返回类型)(^block...

  • iOS Block __block说明符

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block存储域及循环引用 上一...

  • ios block使用

    iOS Block的使用一 .最简单的block使用******使用block的三个步骤:1.定义block变量 ...

  • Block和Delegate使用?区别?注意事项?

    iOS Block 和 Delegate 的使用比较 1.共同的作用: Block 和 Delegate中的方法都...

  • ios中Block使用

    属性block是一个函数对象,在程序运行中生成。在运行时,block创建在栈(stack)上,和其他分配在栈上的对...

网友评论

      本文标题:iOS 中使用 block 相关

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