iOS  闭包 学习

理解:
1 .   闭包外界无法访问内部变量 ,它是一个独立的代码块.
2 .   闭包可以作为 一个方法 ,甚至局部变量  全局 变量
3 .   闭包 是一种引用类型
 
注意要点:
 
1  . 滥用闭包会有很大的问题,最严重的就是会产生循环引用(死锁). 举例子
NSString* s =@"";
void (^block)() = ^() { NSLog(@"%@",s);
};
block();//
s =@"abc”;
block();// 2
打印结果是 123 123

理解起来很简单,根据闭包特性,闭包外界无法访问内部变量, //1 处 内部变量 s 是 123  在外边又重新赋值 abc  //2 处打印 闭包里面的s 就不会在随闭包外界改变.

那么在实际应用 过程中,一个代码块反复被调用的话,并且像上述方法一样使用,反复调用一个变量,那么就会出现循环引用的问题.

解决方案:扩大局部变量的作用域 .举例子

__block NSString* s = @"";

   void (^block)() = ^() {

       NSLog(@"%@",s);
};
block();// s =@"abc”; block();//4 打印结果是 123 abc
 
__block标示的变量,会将变量的作用域变大.s相当于变成全局的作用域.
所以 结果 是 123  然后是 abc 则不难理解.
 
循环引用的问题 就是资源竞争 在ios 里面就是两个或两个以上强引用.
所以  
__weak NSString* s = @"123”;  也是满足需求
通常我都这么干 (没报错 也不会有任何警告)
__weak __block  NSString* s = @"123”;
 示例
标记绿色 的方法实施后 警告都会消失
 
 
常见用法
我只是从实践的角度理解了一下闭包
 
网上看到一个比较好的文章如下
http://my.oschina.net/joanfen/blog/317644
可以好好揣度一下  很受用

iOS block 闭包的学习的更多相关文章

  1. Objective-C中的Block(闭包) (轉載)

    来源: 伯乐在线 - 青玉伏案 链接:http://ios.jobbole.com/83229/ 学习OC有接触到一个新词Block(个人感觉又是一个牛气冲天的词),但不是新的概念,不是新的东西.学过 ...

  2. iOS Block界面反向传值

    在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C ...

  3. (译)IOS block编程指南 1 介绍

    Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to stan ...

  4. iOS block从零开始

    iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void ...

  5. iOS - Block 代码块

    1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...

  6. ios和android一并学习的体会

    如果说为什么要同时学习这两种不同的移动平台,其实有一定的“闲”的因素在里面. 相对于ios,android我是早半年接触的.最开始学习的时候也就是j2ee学习的延续,通过看视频连带看书学了大概一个月的 ...

  7. [iOS]关于零基础学习iOS开发的学习方法总结

    关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...

  8. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  9. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

随机推荐

  1. Business Process and SAP ERP

    1. Definition of Organisation - Organizations are created entities within and through which people i ...

  2. 【Excle数据透视表】如何按照地区交替填充背景颜色

    现存在如下数据透视表 需要根据地区填充不同的背景颜色 步骤 选定数值区域→开始→条件格式→新建规则,出现如下窗口: 公式:=MOD(COUNT(1/(MATCH($A$4:$A4,$A$4:$A4,) ...

  3. jquery 插件:chosen

    options 文档 https://harvesthq.github.io/chosen/options.html 官网: http://plugins.jquery.com/chosen/

  4. [译] 通过 contentEditable 属性创建一个所见即所得的编辑器(富文本编辑器)

    译者注 这只是一篇入门教程,介绍了一些基础知识,仅供参考,切不可因此觉得富文本编辑器很简单. 创建富文本编辑器是一个非常复杂的工程,需要考虑到方方面面,也有很多坑(请参考原文第一条评论). 为免误导大 ...

  5. 使用PostMan快速生成代码

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.关于PostMan的下载和使用网上有很多相关的博客介绍,本文主要介绍PostMan在进行模拟Http请求后可以根据需要的 ...

  6. msyql5.5修改配置文件开启慢查询日志

    修改/etc/my.cnf文件 在[mysqld]下面修改或添加配置(在别处不起作用) slow_query_log = on slow_query_log_file = /usr/local/mys ...

  7. 清除掉AD的相关属性!

    今天有朋友问我怎么清除掉AD 的相关属性,由于他们的用户都设置了登录到属性,这样我们的用户就仅仅能登陆他须要设置的计算机.对于兴许规则的变更的时候,我们的管理员配置起来就比較复杂.他须要非常长的时间去 ...

  8. vi编辑器命令大全

    >> from zhuhaiqing.info

  9. TCP粘包处理通用框架--C代码

    说明:该文紧接上篇博文“ linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现 ”讲来 (1)TCP粘包处理数据结构设计 #define MAX_MSG_LEN 65535 ty ...

  10. 搭建apphouse(docker镜像私服)

    1.下载apphouse,地址为http://www.youruncloud.com/soft.html2.上传AppHouse_v1.0.2.tar到服务器并解压3../apphouse_insta ...