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.这里只记录一些日记(只为提升英语,暂时有点忙,等转行了开始写)
  • 相关阅读:
    JAVA07-Object类、Date类、Calendar类、System类、包装类、Collection、泛型、List、Set、数据结构、Collections
    大话数据结构03-线性表
    大话数据结构02-算法
    大话数据结构01-数据结构序论
    03-移动营销设计-H5设计方法
    02-移动营销设计-设计流程与规范技巧
    字典的定义和操作 (Python)
    列表的系列操作(python)
    列表操作之定义,切片(取元素)(Python)
    python的基础socket知识
  • 原文地址:https://www.cnblogs.com/liyang31tg/p/3667123.html
Copyright © 2011-2022 走看看