Block
2016-05-23 07:54
162 查看
单例是存储在静态区,不会执行dealloc方法,不用管理内存。
一百个单例对象的地址都是一样的。
block是一个数据类型, 多用于参数传递, 代替代理方法, (有多个参数需要传递或者多个代理方法需要实现还是推荐使用代理方法), 少用于当做返回值传递.
block是一个OC对象, 它的功能是保存代码片段, 预先准备好代码, 并在需要的时候执行.
在Xcode里输入inlineblock可以快速补全block定义:
<#returnType#> (^<#blockName#>) (<#parameterTypes#>) = ^ (<#parameters#>) {
<#statements#>
};
returnType : 返回值类型
blockName : block命名
parameterTypes : 参数类型
parameters : 参数
声明block使用 <#returnType#> (^<#blockName#>) (<#parameterTypes#>);
如: @property (copy, nonatomic) void (^block)(int);
^(<#参数#>){
/* 在Block中, 如果只使用全局或静态变量或不使用外部变量, 那么Block块的代码会存储在全局区;
如果使用了外部变量, 在ARC中, Block块的代码会存储在堆区;
在MRC中, Block快的代码会存储在栈区;
block默认情况下不能修改外部变量, 只能读取外部变量:
在ARC中, 外部变量存在堆中, 这个变量在Block块内与在Block块外地址相同;
外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的堆中;
在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外相同;
外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的栈中;
如果需要修改外部变量, 需要在外部变量前面声明 __block
在ARC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;
外部变量存在栈中, 这个变量会被转移到堆区, 不是复制, 是转移.
在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;
外部变量存在栈中, 这个变量在Block块内与Block块外地址相同;
*/
}
使用block代码块应注意内部循坏引用, 导致循环引用应在block定义前加上__weak声明:
__weak typeof(<#obj#>) weak<#obj#> = <#obj#>;
一百个单例对象的地址都是一样的。
block是一个数据类型, 多用于参数传递, 代替代理方法, (有多个参数需要传递或者多个代理方法需要实现还是推荐使用代理方法), 少用于当做返回值传递.
block是一个OC对象, 它的功能是保存代码片段, 预先准备好代码, 并在需要的时候执行.
在Xcode里输入inlineblock可以快速补全block定义:
<#returnType#> (^<#blockName#>) (<#parameterTypes#>) = ^ (<#parameters#>) {
<#statements#>
};
returnType : 返回值类型
blockName : block命名
parameterTypes : 参数类型
parameters : 参数
声明block使用 <#returnType#> (^<#blockName#>) (<#parameterTypes#>);
如: @property (copy, nonatomic) void (^block)(int);
^(<#参数#>){
/* 在Block中, 如果只使用全局或静态变量或不使用外部变量, 那么Block块的代码会存储在全局区;
如果使用了外部变量, 在ARC中, Block块的代码会存储在堆区;
在MRC中, Block快的代码会存储在栈区;
block默认情况下不能修改外部变量, 只能读取外部变量:
在ARC中, 外部变量存在堆中, 这个变量在Block块内与在Block块外地址相同;
外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的堆中;
在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外相同;
外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的栈中;
如果需要修改外部变量, 需要在外部变量前面声明 __block
在ARC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;
外部变量存在栈中, 这个变量会被转移到堆区, 不是复制, 是转移.
在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;
外部变量存在栈中, 这个变量在Block块内与Block块外地址相同;
*/
}
使用block代码块应注意内部循坏引用, 导致循环引用应在block定义前加上__weak声明:
__weak typeof(<#obj#>) weak<#obj#> = <#obj#>;
相关文章推荐
- 学习历程2016522(2)
- C语言利用openSSL库DES模块加密
- HDU 1164 Eddy's research I(埃拉托斯尼斯筛法求素数)
- 出差(3~十二)
- 学习笔记
- 学习历程2016522(1)
- DNS错误
- slitaz的使用笔记
- Java---记录用户名和密码,保存至隐藏文件
- ubuntu 安装 fcitx搜狗输入法
- shiro salt
- shiro salt
- 【BZOJ2733】[HNOI2012]永无乡【启发式合并】【Splay】
- UI基础第三天(代码)
- angularjs事件指令--ngClick、ngDbclick、ngCut、ngChange、ngKeydown...
- 微博,微信图片浏览过渡动画的实现
- 云计算相关论文目录
- Redis3 本地安装集群的记录
- 结合Jexus + Kestrel 部署 asp.net core 生产环境
- 除了技术,我们还能拼什么?