block 入门
来源:互联网 发布:注册淘宝 编辑:程序博客网 时间:2024/06/07 19:34
本文简介
本章不会对Block做过多的实现研究。只是讲解基本的用法。纯粹基础知识。结合实际项目怎么去做举例。Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。
Block简介
Block是一种比较特殊的数据类型。它可以保存一段代码,在合适的时候调用。Block可以访问局部变量,但是不能修改,如果修改局部变量,需要加__block或者__weak修饰局部变量。然而在访问过程中不管你是通过引用来访问一个实例变量还是值来访问一个实例变量它都会产生强引用,从而引起循环引用(解决方法如下)。
Block的修饰
ARC情况下
1.如果用copy修饰Block,该Block就会存储在堆空间。则会对Block的内部对象进行强引用,导致循环引用。内存无法释放。
解决方法:
新建一个指针(__weak typeof(Target) weakTarget = Target )指向Block代码块里的对象,然后用weakTarget进行操作。就可以解决循环引用问题。2.如果用weak修饰Block,该Block就会存放在栈空间。不会出现循环引用问题。
MRC情况下
用copy修饰后,如果要在Block内部使用对象,则需要进行(__block typeof(Target) blockTarget = Target )处理。在Block里面用blockTarget进行操作。
MRC下__block修饰的对象变量在block里不会被retain,但ARC下会
Block的定义格式
返回值类型(^block变量名)(形参列表) = ^(形参列表) {
};
调用Block保存的代码
block变量名(实参);
作为函数参数定义
(void (^)(形参列表)) 函数参数名;
-(void)sum:(void (^)(int ,int ))sum{
sum(1,2);
}
作为成员变量定义
@property(nonatomic,copy)void (^成员变量名)(形参列表);
不过在实际开发当中我们大多数都是配合typedef来使用的,
- block 入门
- block简单入门
- Objective-C入门20:Block
- inline-block从入门到精通
- inline-block从入门到精通
- iOS概念入门学习-Foundation框架-Block
- Block
- block
- Block
- block
- block
- block
- block
- block
- block
- Block
- block
- Block
- Buy and sell stock at best time(i,ii,iii)
- 第十一周-判断三角形
- 九九归一
- Repeating Decimals,ACM/ICPC World Finals 1990,UVa202
- 在做自动化测试之前你需要知道的,转自:http://www.cnblogs.com/fnng/p/3653793.html
- block 入门
- 计算机网络基本概念
- mac系统:HTTP Status 500 - java.lang.ClassNotFoundException: org.apache.jsp.helloworld_jsp
- Cocos2dx:cocos2d-x-3.2版本学习过程中所遇到的一些问题(每一次都是一次作死的感觉)
- fastJson的使用
- Web性能压力测试工具之WebBench详解
- log4j.properties配置详解
- 度分秒与经纬度的互转
- Android 疯狂造轮子 常用工具类 直接拿来用!