block使用场景和注意事项

1.使用场景:一般在一个函数的前面和后面都是重复性的东西,只有中间变化,一般使用block

2.注意事项

01:可以访问外面的变量(作用域问题)

02.里外变量同名的时候,访问里面那个(就近原则)

03.可以访问外面的变量,但是不能改外面的值,因为不是同一个地址(只是copy了一份,值传递)

04.想要改变外面变量的值,需要 变量前 加上 _block (地址传递)

05.block类型存放位置:默认是栈,对block进行copy时,放在碓中

在栈中时,访问外面对象,不会对对象 retain一次

copy后在堆中时,会对对象进行retain一次,造成内存泄漏,不=0

解决方案:对对象进行 _block, 这样不管在堆还是栈,都不会retain一次

参考资料:

原文地址:https://www.cnblogs.com/xiaohuihui-/p/8353864.html

时间: 2024-10-12 07:59:52

block使用场景和注意事项的相关文章

重要经验五:block作为属性的注意事项

现代ios应用的开发,不使用GCD和block,效率会降低很多,在今年3月份之前,我在block的学习和使用方面,精力和经验都明显不足,在SF有个牛逼同事,不仅自己积累了一套库,而且对这个库持续进行更新和维护,其架构能力和代码水平都不错,他的代码中使用了大量的GCD,为了适应这些技术,我在coding的过程中,开始有意识的多写GCD的代码,刚开始一切顺利,直到我使用block来作为一个对象的属性,这让我纠结了很久. 我遇到的问题是:1,这种属性block,其他类在使用的时候,应该怎么写? 2,b

面试官:ThreadLocal的应用场景和注意事项有哪些?

前言 ThreadLocal主要有如下2个作用 保证线程安全 在线程级别传递变量 保证线程安全 最近一个小伙伴把项目中封装的日期工具类用在多线程环境下居然出了问题,来看看怎么回事吧 日期转换的一个工具类 public class DateUtil { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static Date parse(Strin

Tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

http://www.cnblogs.com/lulu/p/4149312.html http://blog.csdn.net/yah99_wolf/article/category/539413    关于TCP linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用.允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 0 表示开启TCP连接中TIME-WA

block的使用和注意事项

1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block). 另一个需要注意的问题是关于线程安全,在声明Block属性时需要确认“在调用Block时另一个线程有没有可能去修改Block?”这个问题,如果确定不会有这种情况发生的话,那么Block属性声明可以用nonatomic.如果不肯定的话(通常情况是这样的),那么你首先需要声明Blo

java中修饰符的使用场景与注意事项

在java编程语言里,修饰符是出现在类的定义.属性.方法.构造器.初始化块等定义时的修饰.修饰符有分为访问修饰符和可选修饰符,他们基本都是关键字,有一个例外,就是访问修饰符除了public/protected/private之外还有一个默认访问修饰符,共4种.而可选修饰符则有abstract/const/default/final/native/static/strictfp/synchronized/transient/volatile. 修饰符 修饰场景 类 成员方法 构造方法 成员变量 局

android:PopupWindow的使用场景和注意事项

1.PopupWindow的特点 借用Google官方的说法: "A popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity." 也就是说.popupwindow是activity上方的一个悬浮容器.它能够显示随意的视图View,非常霸气的样子. 以下看一

block注意事项

1.block的声明和注意事项 #import "ZYViewController.h" @interface ZYViewController () @end /*用typedef可以声明一种类型的block*/ //block前加上typedef, 那么就不是一个block指针(变量),而是一种block类型 //给int (^) (int a, int b) 这种block类型 声明了一个别名,叫做Block5 typedef int (^Block5) (int a, int

iOS中Block的基础用法

本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道Block的精妙之处. Block简介 Block是一种比较特殊的数据类型.它可以保存一段代码,在合适的时候取出来调用. Block的修饰 ARC情况下1.如果用copy修饰Block,该Block就会存储在堆空间.则会对Block的内部对象进行强引用,导致循环引用.内存无法释放.解决方法:新建一个

32-oc block

Block基本概念 学习的时候注意和指向函数的指针对比学习 什么是Block Block是iOS中一种比较特殊的数据类型,用来保存某一段代码 Block的作用 Block用来保存某一段代码, 可以在恰当的时间再取出来调用功能类似于函数和方法 问题3:Block的格式 答: Block的格式: 返回值类型 (^block变量名)(形参列表) = ^(形参列表) { }; Block和typedef 怎么使用tydedef给 block 起别名?注意和指向函数的指针进行对比 利用typedef给bl