- (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 使用总结的更多相关文章

  1. Objective-C中block的底层原理

    先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...

  2. iOS 键盘添加完成按钮,delegate和block回调

    这个是一个比较初级一点的文章,新人可以看看.当然实现这个需求的时候自己也有一点收获,记下来吧. 前两天产品要求在工程的所有数字键盘弹出时,上面带一个小帽子,上面安装一个“完成”按钮,这个完成按钮也没有 ...

  3. python中IndentationError: expected an indented block错误的解决方法

    IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进

  4. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  5. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  6. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  7. Block解析(iOS)

    1. 操作系统中的栈和堆 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方 ...

  8. CSS学习笔记——包含块 containing block

    以下内容翻译自CSS 2.1官方文档.网址:https://www.w3.org/TR/CSS2/visudet.html#strut 有时,一个元素的盒子的位置和尺寸根据一个确定的矩形计算,这个确定 ...

  9. 用block做事件回调来简化代码,提高开发效率

       我们在自定义view的时候,通常要考虑view的封装复用,所以如何把view的事件回调给Controller就是个需要好好考虑的问题, 一般来说,可选的方式主要有target-action和de ...

  10. 关于多个block问题

    在某个添加文本的页面中,leftbarbutton是删除(直接将数组中的这个string删除),rightbarbutton是完成,分别对应两个block,完成的block是一开始写的,写到了view ...

随机推荐

  1. OC学习篇之---对象的拷贝

    在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来 ...

  2. Python之-异常处理

    1.python中处理异常的方式 #coding:utf8 filename=raw_input("请输入你要操作的文件") try: f=open(filename) print ...

  3. winserver安装zabbixAgent

    zabbix 布署实践[8 监控windows server]   参考http://www.cnblogs.com/likehua/p/3968689.html的思路,我安装的是zabbix 3.0 ...

  4. 【Java架构:基础技术】一篇文章搞掂:Linux

    基于CentOS 一.安装[暂略] 二.使用和登录[赞略] 三.使用yum CentOS自带yum,这里暂时不介绍安装方式 四.使用yum安装JDK 1.检查系统是否有安装open-jdk rpm - ...

  5. 设置当内容超出div(文字长度超出div宽度)出现滚动条

    overflow 一共有5个属性. 1.overflow:auto:内容会被修剪,超出设置的宽高后会出现滚动条 2.overflow:scroll;内容会被修剪,不管内容是否超出,都会出现滚动条的位置 ...

  6. String Algorithm Summary - 1

    目录 Suffix Array Summay 单个字符串问题 两个字符串问题 多个字符串问题 AC-Automaton Summary 求长度为n(2e9)不包含给定字符串的合法串个数 包含至少一个词 ...

  7. 通过HttpServletResponseWrapper修改response输出流

    在项目中遇到一个问题,需要对接口返回的数据进行加密给前端.项目中的controller一般都是返回一个实体form,重写的一个视图解析器继承ModelAndViewResolver,对返回的form转 ...

  8. (18)C++ string和标准模板库

    一.stringl类 1.string构造函数 string a1("abc");//初始化字符串 cout<<a1<<endl;//abc , '#'); ...

  9. 91、R语言编程基础

    1.查看当前工作空间 > getwd() ] "C:/Users/P0079482.HHDOMAIN/Documents" > 2.查看内存中有哪些对象 > ls ...

  10. 力扣算法——133.CloneGraph【M】

    Given a reference of a node in a connected undirected graph, return a deep copy (clone) of the graph ...