Block 使用总结
- (void)testBlockWeakObj1
{
UILabel *tl = [[UILabelalloc]init];//本地局部变量
__weak UILabel *weakTL = tl;//弱引用变量
NSLog(@"%s tl %p",__FUNCTION__ , &tl);
NSLog(@"%s tl %@",__FUNCTION__ , tl);
NSLog(@"%s weakTL %p",__FUNCTION__ , &weakTL);
NSLog(@"%s weakTL %@",__FUNCTION__ , weakTL);
void (^TestBlock)(void) = ^{
//复制tl指针,并且强引用tl
NSLog(@"%s tl %p",__FUNCTION__ , &tl);
NSLog(@"%s tl %@",__FUNCTION__ , tl);
//复制weakTL指针,并且弱引用weakTL
NSLog(@"%s weakTL %p",__FUNCTION__ , &weakTL);
NSLog(@"%s weakTL %@",__FUNCTION__ , weakTL);
};
tl = nil;
TestBlock();
NSLog(@"block is %@", TestBlock);
}
/*输出结果
2014-02-21 17:50:42.591 TestBlock[13888:70b] -[ViewController testBlockWeakObj1] tl 0xbfffc9b0
2014-02-21 17:50:42.591 TestBlock[13888:70b] -[ViewController testBlockWeakObj1] tl <UILabel: 0x8c57c30; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x8c562d0>>
2014-02-21 17:50:42.592 TestBlock[13888:70b] -[ViewController testBlockWeakObj1] weakTL 0xbfffc9ac
2014-02-21 17:50:42.592 TestBlock[13888:70b] -[ViewController testBlockWeakObj1] weakTL <UILabel: 0x8c57c30; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x8c562d0>>
2014-02-21 17:50:42.592 TestBlock[13888:70b] __35-[ViewController testBlockWeakObj1]_block_invoke tl 0x8b09434
2014-02-21 17:50:42.593 TestBlock[13888:70b] __35-[ViewController testBlockWeakObj1]_block_invoke tl <UILabel: 0x8c57c30; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x8c562d0>>
2014-02-21 17:50:42.611 TestBlock[13888:70b] __35-[ViewController testBlockWeakObj1]_block_invoke weakTL 0x8b09438
2014-02-21 17:50:42.612 TestBlock[13888:70b] __35-[ViewController testBlockWeakObj1]_block_invoke weakTL <UILabel: 0x8c57c30; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer:
0x8c562d0>>
2014-02-21 17:50:42.612 TestBlock[13888:70b] block is <__NSMallocBlock__: 0x8b09420>
*/
- (void)testBlockWeakObj2
{
__block UILabel *tl = [[UILabelalloc]init];//加上block关键字就变成全局变量
__weak UILabel *weakTL = tl;//弱引用变量
NSLog(@"%s tl %p",__FUNCTION__ , &tl);
NSLog(@"%s tl %@",__FUNCTION__ , tl);
NSLog(@"%s weakTL %p",__FUNCTION__ , &weakTL);
NSLog(@"%s weakTL %@",__FUNCTION__ , weakTL);
void (^TestBlock)(void) = ^{
//tl是全局变量,强引用
NSLog(@"%s tl %p",__FUNCTION__ , &tl);
NSLog(@"%s tl %@",__FUNCTION__ , tl);
//复制weakTL指针,并且弱引用weakTL
NSLog(@"%s weakTL %p",__FUNCTION__ , &weakTL);
NSLog(@"%s weakTL %@",__FUNCTION__ , weakTL);
};
tl = nil;
TestBlock();
NSLog(@"block is %@", TestBlock);
}
/*输出结果
2014-02-21 17:55:13.832 TestBlock[13926:70b] -[ViewController testBlockWeakObj1] tl 0xbfffc9b0
2014-02-21 17:55:13.832 TestBlock[13926:70b] -[ViewController testBlockWeakObj1] tl <UILabel: 0x8a32470; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x8a37410>>
2014-02-21 17:55:13.832 TestBlock[13926:70b] -[ViewController testBlockWeakObj1] weakTL 0xbfffc994
2014-02-21 17:55:13.833 TestBlock[13926:70b] -[ViewController testBlockWeakObj1] weakTL <UILabel: 0x8a32470; frame = (0 0; 0 0); clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x8a37410>>
2014-02-21 17:55:13.833 TestBlock[13926:70b] __35-[ViewController testBlockWeakObj1]_block_invoke tl 0x8a3bdf8
2014-02-21 17:55:13.833 TestBlock[13926:70b] __35-[ViewController testBlockWeakObj1]_block_invoke tl (null)
2014-02-21 17:55:13.834 TestBlock[13926:70b] __35-[ViewController testBlockWeakObj1]_block_invoke weakTL 0x8a3bdd8
2014-02-21 17:55:13.834 TestBlock[13926:70b] __35-[ViewController testBlockWeakObj1]_block_invoke weakTL (null)
2014-02-21 17:55:13.834 TestBlock[13926:70b] block is <__NSMallocBlock__: 0x8a3bdc0>
*/
版权声明:本文为博主原创文章,未经博主允许不得转载。
Block 使用总结的更多相关文章
- Objective-C中block的底层原理
先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...
- iOS 键盘添加完成按钮,delegate和block回调
这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- Block解析(iOS)
1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...
- CSS学习笔记——包含块 containing block
以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...
- 用block做事件回调来简化代码,提高开发效率
我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和de ...
- 关于多个block问题
在某个添加文本的页面中,leftbarbutton是删除(直接将数组中的这个string删除),rightbarbutton是完成,分别对应两个block,完成的block是一开始写的,写到了view ...
随机推荐
- OC学习篇之---类目的概念和使用
上一篇文章介绍了OC中的@class关键字的使用http://blog.csdn.net/jiangwei0910410003/article/details/41774747,这一篇我们介绍一下,O ...
- stm32 单片机
STM32系列基于专为要求高性能.低成本.低功耗的嵌入式应用专门设计的ARM Cortex-M3内核(ST's product portfolio contains a comprehensive r ...
- SQLSERVER 时间日期函数,查询今天日期、昨天、一个星期、半年前的数据
今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0昨天的所有数据:select * from 表名 where D ...
- 一个python练习
问题描述: 有一对兔子,每隔3个月就生一对兔子,生下来的兔子也是每隔3个月就生兔子,以此类推... 用python模拟出来: #!/usr/bin/python3 import random impo ...
- 04 循环结构概述和for语句的格式及其使用
04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do…while B:循环结构for语句的格式: for(初始化表达式;条件表达式;循环 ...
- 内核module读取进程页目录
根据当前CR3寄存器内容,读取对应物理内存中的页目录页,并进行解析 1: void dumpPageDirectoryEntry(u32 entry) 2: { 3: u8 present; 4: u ...
- CentOS7 启动docker.service失败
背景:阿里云服务器安装了docker服务,并且更改了仓库位置 需求:让docker正常启动 方法: 一.修改/etc/docker/daemon.json文件后缀 当向该文件中写入仓库配置时,该文件后 ...
- GNU Linux 64汇编学习
函数调用传参: 第一个参数:rdi, 第二个参数:rsi 函数调用栈结构: 返回值 第一个参数 第二个参数 +----------+ rsp-24 | a | +----------+ rsp-16 ...
- Java开发最常犯的10个错误,打死都不要犯!
原文:http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 译文:cnblogs.com/chenpi/p ...
- 使用org-mode写cnblogs博客
使用org-mode写cnblogs博客 */--> pre.src {background-color: #002b36; color: #839496;} pre.src {backgrou ...