block 心得

block

(如有错误,或者有一些建议 , 请联系我 愿意听取建议)

  • block  比函数灵活 可以在程序里面设定 也可以在程序外面设定

  • block  主要用于封装程序  到适应的时候调用  (有参数 和 无参数)

  • block  重命名 typedef  int (^MyBlock)
    (int,int)  其中  int (^MyBlock)表示返回值参数以及 重命名之后 block
    名字     后面是俩形参

  • 起初 没有多线程时 整个程序中只有一条线程

  • 在block 代码块中如果用 self 强引用 会出现 循环引用的问题 , 导致 内存不能被释放   所以在block 代码块外面
    引用弱指针 是为了内存能彻底释放

在 block 代码中
一般不要用到外面东西

如果在 block
代码中必须用到外面的东西    (block 中有代理设置为self)

最后 会产生强引用   结果无法释放

结决方法 (防止block循环引用) : 先把它弄出来声明为弱指针

  • __unsafe_unretainsd  typeof(self)  selfVc  =
    self;

  • __weak  typeof(self)   selfVc  = self;

  • __weak  (当前控制器 *)  selfVc  = self;

上面三种方法 都要在block上面写 意思是:

  • 声明一下 下面的self 就是这个控制器 并且变为弱指针

但这样同时存在一个问题   __weak弱引用随时可能被销毁

  • 但在多线程中  子线程运行完毕后就会被释放,所以在子线程的block
    代码快中可以采用self强引用 保证了能执行每一次的块代码  最后直接销毁

只有self直接强引用block,才会出现循环引用
 (内存不能释放)
   
  block的管理以及线程的创建和销毁是由队列负责的,直接在block中使用self没有关系!

时间: 2024-10-09 03:35:34

block 心得的相关文章

block心得

最近一直在搞项目,突然发觉用block特别是只掉一次的时候比代理好用多了,废话不多说block遍历数组 正序排序 NSArray *orginKeys = [[orginDictM1 allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; 下面说一下当参数传递 - (instancetype

黑马程序员—oc语言学习心得—block

黑马程序员—oc语言学习心得—block -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,程序一般用typedef定义一个block类型 然后调用 typedef void(^xxx)(); 可使用助记符 inlineblock 2,Block内部可以访问外部变量:默认情况下,Block内部不能修改外部的局部变量 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改. 3,block的作用: 利用block封

block的学习的心得

额我主要说它的属性,和在添加cell的事件的时候如果使用block实现点击的事件. block就是一个传值回调的一个过程,它能降低耦合度.block看似和对象没有多大的关系.但是里面的block却执行了关于对象的事件.他的语法那些视频上都有,这里就不多说了. 但是有这个3点.1.在block中引用局部的变量时会变成常量不可以修改 ,要想修改时必须是__block修饰时才可以修改 2.在内存方面还是局部变量会retain,__block修饰时不会retain 且block声明全局变量时,我们应该调

oc中的block使用心得

typedef void (^ simpleBlock) (void); typedef double (^multiplyTwoValues)(double, double); typedef void (^ simpleTestBlock) (int ,int); @implementation TJAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDic

iOS开发Delegate,Notification,Block使用心得

(一)简要介绍 1.Delegate(代理.委托) 代理几乎是iOS开发中最常用的传值方式,在项目中的AppDelegate就是使用的这种设计模式,不仅如此,还有很多原生的控件也使用的这种设计模式,比如:UITextFiled,UITableView等等.官方给出的解释如下: Delegation is a simple and powerful pattern in which one object in a program 1 acts on behalf of, or in coordin

IOS之block,一点小心得

作为一个iOS开发程序员,没用过block是不可能的.这次我探讨的是block原理,但是有些更深层次的东西,我也不是很清楚,以后随着更加了解block将会慢慢完善. 第一个问题,什么是block? 我们都会用block,但是block是什么呢,这是首先要弄清楚的概念.虽然,是什么并不影响我们用它,但是搞清楚原理我们才能更好的去使用它,我觉得作为一个程序员,需要时刻保持对事物原理追究的心态? block的是本质是对象.但是你也可以说它是代码块.闭包.内联函数.函数指针...还有很多叫法,也可能这里

编写HTML和CSS几点心得

HTML代码优化 表单域用fieldset包起来,并用legend说明其用途(注意在css初始化的时候把fieldset的border设为0,把legend的display设为none) 每个input标签要用label来标注文本,并为每个input设id,用for关联. 为了提高搜索引擎友好性,要减少table标签使用.但是对于呈现二维数据,table却是首选,当然我们的优化方法是表格的标题用<caption></caption>包裹,表头用<thead></t

移动端网页设计经验与心得

原文:移动端网页设计经验与心得 智能手机发展确实很迅速,像今年,我的大部分工作就都在移动端网页上. 再往前些年,看到的手机版/移动版网页,限制于浏览器与手机性能,2g网络速度等 网页设计无非是蓝.黑.白,界面单调,并且要尽可能的设计简单. 现在情况就大不相同了,软件上webkit内核浏览器大行其道,硬件突飞猛进,网速来说,4g正炒得火热. 下面就和大家分享一下我的一些移动端网页设计经验与心得. ⒈ 分辨率这应该是移动端网页最关心的问题了,因为移动设备五花八门,各种分辨率都有.要想在这些设备上都能

BC1.2的一些心得

什么叫DCD DataContact Detect(DCD) 1.首先是DCD 2.然后是Primary detection 3.然后是Secondary detection 检测充电的条件是VBUS>VOTG_SESS_VLD 检测流程 1.DCD 阶段 打开IDP_SRC与RDM_DWN,检测D+上的电压和VLGC_LOW比较.如果VDP小于VLGC_LOW,或者TDCD_TIMEOUT则DCD阶段结束,这个时候应该关闭IDP_SRC和RDM_DWN 标准的CDP和SDP都是支持DCD的 2