iOS之——Block

神一样的存在

网上资源

iOS开发中copy、retain的定义和区别

  1. Block 为什么使用copy
  • Block在创建的时候默认分配的内存在栈上,而不是在堆上。使用copy将其拷贝到堆上,防止在创建的作用域之外使用崩溃。
  • Block 创建在栈上,而Block的代码中可能会用到本地的一些变量,只有将其拷贝到堆上才能使用这些变量。
  1. Block 为什么不适用retain
    retain使用引用计数增加1,Block的内存在栈上,不是堆上,可能随时被系统回收,导致野指针存在,程序崩溃。
  2. 为什么Block中的对象引用计数需要自动加1
    Block执行的是回调,因此Block并不知道其中的对象obj创建后会在什么时候释放,为了不再Block使用object之前,对象已经释放,Block就retain了object一次,持有这个对象。
  3. Block和函数的关系
  4. Block的理解
    Block实际上是:指向结构体的指针
  5. 对于基本数据
    //如果需要在block中对num进行修改,需要加上关键字__block
    //(我们也可以用static关键字进行修饰)
    int num1 = 10;
    void(^block1)() = ^{
        NSLog(@"num1 is %d",num1);
    };
    num1 = 20;
    block1();//输出10
    
    //改进:使用block,使进入到block块中的变量不被当做常量来使用
    __blockint num2 = 10;
    void(^block2)() = ^{
        NSLog(@"num2 is %d",num2);
    };
    num2 = 20;
    block2();//输出20
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 Block机制 (Very Good) Block技巧与底层解析 http://www.jianshu.com...
    Kevin_Junbaozi阅读 9,479评论 3 48
  • Block基础回顾 1.什么是Block? 带有局部变量的匿名函数(名字不重要,知道怎么用就行),差不多就与C语言...
    Bugfix阅读 11,721评论 5 61
  • 前言 ios4.0系统已开始支持block,在编程过程中,block被Obj-C看成是对象,它封装了一段代码,这段...
    GitHubPorter阅读 4,191评论 2 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,344评论 30 472
  • 我很喜欢笑,也很喜欢爱笑的女孩子。一场流星雨之后,很多人记住了她,楚雨荨(郑爽)。可是,在访谈节目的她,却很不自信...
    沐天晴阅读 9,868评论 51 131