block传值是从后往前传值---代理也是

// 使用block时, 不能访问self, 也不能直接访问属性, self.属性, 用self调用方法; 只要这样做了, block都会对其强引用一份, 也就是造成self对象引用计数+1;
    // 如何避免出现循环引用的情况: 1. 在MRC下, 使用__block 定义一个和self同样的指针, 让block弱引用; 2. 在ARC下 使用__weak
    //    __weak typeof(self)weakSelf = self;
    //    __weak DetailViewController *weakSelf = self;
    //    __block DetailViewController *weakSelf = self;
    // typeof(): 运算符; 这句话就是把weakSelf定义成self指向的数据类型(指针类型), 第一个self是规定weakSelf的类型, 第二个self是把weakSelf指向self;

#warning mark --第一步 定义block的类型属性
typedef void (^TSET)();
typedef void (^PassValue)(NSString *);

// 1. 确定要添加的block属性的数据类型 void (^)()
// 2. 定义block变量, 在内存修饰时使用copy, 因为block变量存放在栈区, 此时我们这个对象想持有一份, 使用copy就能把栈区的变量拷贝到堆区, 这样block就不会丢失;

系统开辟的是栈区一般 C语言,我们自己开辟的是堆区自己过来内存

#warning mark -- 第二步 定义block属性;
@property (nonatomic,copy)TSET testBlock;
@property (nonatomic,copy)PassValue passvalue;

#warning mark -- 释放block
    Block_release(_testBlock);
    Block_release(_passvalue);

#warning mark -- 第三步push之前完成对block属性的赋值, 也就是确定block内部要做的事情;
    __block typeof (self)weakSelf = self;
    detail.passvalue = ^ (NSString *string) {
        weakSelf.alable.text = string;
    };

#warning mark -- 第四步block属性的调用
    self.passvalue(self.textField.text);

浅谈Block传值-匿名函数(代码块)的更多相关文章

  1. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆   代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元 ...

  2. 前端JS面试题汇总 Part 2 (null与undefined/闭包/foreach与map/匿名函数/代码组织)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  3. 浅谈Kotlin中的函数

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UV23Uw_969oVhiOdo4ZKAw作者:连凌能 Kotlin,已经被Android官方 ...

  4. 浅谈Java的匿名类

    在实际的项目中看到一个很奇怪的现象,Java可以直接new一个接口,然后在new里面粗暴的加入实现代码.就像下面这样.那么问题来了,new出来的对象没有实际的类作为载体,这不是很奇怪吗? 思考以下代码 ...

  5. 浅谈 block(1) – clang 改写后的 block 结构

    这几天为了巩固知识,从 iOS 的各个知识点开始学习,希望自己对每一个知识理解的更加深入的了解.这次来分享一下 block 的学习笔记. block 简介 block 被当做扩展特性而被加入 GCC ...

  6. JavaScript 作用域 匿名函数 模仿块级作用域(私有作用域)

    作用域 对于有块级作用域的语言来说,for语句中定义并初始化的变量i在循环外是无法访问的. 而javascript没有块级作用域,for语句中定义的变量i在循环结束后,依旧会存在于循环外部的执行环境( ...

  7. 浅谈JavaScript中的函数问题

    前面的话:JavaScript可运行在所有主要平台的主流浏览器上,也可运行在每一个主流操作系统的服务器端上.所以呢,要想成为一名优秀的全栈工程师,必须懂得JavaScript语言.这是我整理的JS的部 ...

  8. 13_java之final|static|包|匿名对象|代码块|内部类

    01final关键字概念 * A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承 ...

  9. 浅谈JS高阶函数

    引入 我们都知道函数是被设计为执行特定任务的代码块,会在某代码调用它时被执行,获得返回值或者实现其他功能.函数有函数名和参数,而函数参数是当调用函数接收的真实的值. 今天要说的高阶函数的英文为High ...

随机推荐

  1. 关于PagedDataSource,非常好用的一个分页属性!

    Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeate ...

  2. MySql中Blob二进制对象的处理

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器. 可以用于存储图片等信息 Demo1:存储图片 String sql="INSERT IN ...

  3. PHP+MySQL Smarty简单分页显示示例

    一.分页程序的原理 分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page). 有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在m ...

  4. Python新手学习基础之运算符——成员运算与身份运算

    成员运算符 Python里有成员运算符,可以判断一个元素是否在某一个序列中.比如可以判断一个字符是否属于这个字符串,可以判断某个对象是否在这个列表中等等. Python中的成员操作符的使用语法是: o ...

  5. strcpy and memcpy

    1. Inconsist length. char a3[2]; char *a = "Itis   " strcpy(a3, a); It is wrong. a3 will b ...

  6. RichTextBox控件日常使用集合

    1.RichTextBox控件自动滚动到底部 richTextBox1.ScrollToCaret(); //将控件的内容滚动到当前光标位置

  7. 自制单片机之十……AT89S51的上拉电阻问题

    很多网友都问我AT89S51的P0口为什么要接一个上拉电阻.我就用一个篇幅来说一说 P0口和其它三个口的内部电路是不同的,如下图 P0口是接在两个三极管D0和D1之间的,而P1-P3口的上部是接一个电 ...

  8. KEIL 伪指令

    //为了大家查找方便,命令按字母排序:0.ALTNAME 功能: 这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中. 格式: ALTNAME 保留字 自定义名 ...

  9. LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

    LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径 ...

  10. 推荐2个小工具 .NET reflector resharper