zoukankan      html  css  js  c++  java
  • ios-block-对象与对象之间的解偶合

    对象与对象之间通信的3种方式
    1.通知1对多
    2.代理
    3.block
    //blcok中要引用局部变量的时候会作为一个常量编码到block中,因为block不是马上执行的,然而局部变量出来大括号就释放掉了,当然是可以用,不可以修改的
    int number=20;
        [self test:^int(int a,int b){
            number=30;
            return a+b;
        }];
    这种是错误的,
    当然也可以用__block修饰
    __block int number=20;
        [self test:^int(int a,int b){
            number=30;
            return a+b;
        }];
    就可以修改了,经过多方测试,只是因为有了__block修饰过后这个局部变量出了大括号不会马上消失,//这个不会作为一个变量编码到block中

    当在block里面操作对象的时候,引用计数会加1,因为block会将这个的指针copy一份,和java类似管理对象,一个引用就相当于一个引用计数,自然会加一,当有__block修饰的时候不会被编码到block中,是直接通过现有的指针进行操作。只是作用域(作用域会变成,原有作用域和block作用域中大得那个)不会出括号就消失罢了。

    //是通过测试了得,简单一句就是,是否有被编码到block中(判断是否有被编码进去,前提是block中是否用到,再看是否有__block修饰),编码进去了就是复制了一份(简单数据类型就完全脱离的2份,对象就是多了一个引用,相当于retain),没有编码进去(只是会改变作用域),操作的还是原来的那个值或者对象。
    //类似于,强引用和若引用,没有block的就是强引用,有block修饰的就是弱引用,又不完全是强弱引用的关系,弱引用是没法将作用域变化的,(对象的作用域无非还是引用计数的问题,说到底还是再该释放的时候没释放罢了)
    
    
    
     
    1.这里只记录一些学习笔记 2.这里只记录一些学习心得,如果心得方向有错,请留言 2.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    mycat
    人大金仓备份和还原
    文件断点上传,html5实现前端,java实现服务器
    MoChat
    PHP性能追踪及分析工具xhprof的安装与使用
    使用 satis 搭建一个私有的 Composer 包仓库
    sed命令用法详解
    rsync同步工具学习笔记
    服务器支持AspJpeg和JMail45_free.msi组件
    批处理——服务器的web文件备份
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3667123.html
Copyright © 2011-2022 走看看