iOS --- 关于block的常见使用方法(OC)
来源:互联网 发布:ddos压力测试源码 编辑:程序博客网 时间:2024/05/22 13:11
来源:http://blog.csdn.net/icetime17/article/details/48946843
作为property
- 1
- 1
block代码体:
- 1
- 2
- 3
- 1
- 2
- 3
使用:
- 1
- 1
使用typedef
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
使用:
- 1
- 1
作为变量
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
此时myBlock可作为变量自由传递, 调用的时候myBlock(10, 20);即可.
如果想在block中对当前局部变量进行修改的话, 需要使用__block:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
block默认可访问局部变量sum, 而不能修改, 以防出现循环引用的情况.
而__block对象在block中不会被其强引用一次, 所以不会出现循环引用.
__block与__weak
以上可知, 声明block的时候只是把该sum局部变量复制了一份, 因此若其是一个指针, 则在block中修改其指向的内容不需要加__block.
__block修饰对象和基本数据类型, 而__weak只能修饰对象.
__block对象可在block中修改(重新赋值), 而__weak不行.
因此, 对于类的对象, 若要在block中对其属性进行修改, 需要使用__weak. 如:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
作为方法调用的参数
预先声明MyBlock及属性myBlock2,
- 1
- 2
- 1
- 2
定义方法methodTakeBlock接收MyBlock.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
则调用该方法的时候, 在其参数中实现该MyBlock实体:
- 1
- 2
- 3
- 1
- 2
- 3
这种方式仅在implementation中即可.
在方法的声明中写明block类型
在interface中:
- 1
- 2
- 1
- 2
在implementation中:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
调用方法:
- 1
- 2
- 3
- 1
- 2
- 3
在ViewController之间传递数据
在TestViewController.h中定义一个block, 用于从TestViewController跳转至ViewController时修改ViewController中的label内容:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
该block接收一个NSString参数.
点击button触发以下动作
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在ViewController.m中传递block实体, 注意其接收参数要与定义的一致:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
点击button跳转至TestViewController中, 在TestViewController中执行该blockUpdateBtnTitle, 进而修改ViewController中label的内容.
因在block中要对ViewController中的属性进行修改, 因此可使用__weak来防止循环引用.
- 顶
- 1
- iOS --- 关于block的常见使用方法(OC)
- iOS --- 关于block的常见使用方法
- 关于block的OC
- IOS中OC的BLOCK问题
- iOS-Swift调用OC的Block
- IOS-Swift混编 调用OC的Block
- 【iOS】简述下OC block的实现
- 【OC语言】关于block的使用
- iOS --- block的一些使用方法(反向传值)
- IOS开发基础Object-C( 15)-- block的使用方法
- 关于iOS OC部分block的一点初级理论和应用
- 自学iOS开发系列----OC(block)
- ios oc之block
- 关于Block代码块的使用方法
- iOS - block基本使用方法
- IOS开发---OC语言-㉙内存管理:block的使用
- ios开发-OC中ARC、block和protocol的学习
- 关于OC中block深究(对上次内容的补充)
- Delphi XE10实现移动端支付宝支付接口(含源码)
- android不在坑系列二微信支付-1
- 测试采集工具Selenium的Python用法
- git 基础命令使用方法
- 面试系列----谈谈你对android多线程的理解
- iOS --- 关于block的常见使用方法(OC)
- centos6 yum安装docker
- 雪城大学信息安全讲义 3.2 Set-UID 程序的漏洞
- week10- Dynamic Programming-NO.343. Integer Break
- 剑指offer(C++)——序列化二叉树
- java知识点转载
- 斐波那契数--递归和非递归实现
- Python 拓展库安装问题
- 浅谈android mvc、mvp架构思想