Block

来源:互联网 发布:java调用接口传递参数 编辑:程序博客网 时间:2024/05/21 22:54
一:程序的内存区域

1,一个程序运行的时候,他所有的东西都是放在内存里的。
先加载的是代码区*****常量区******全局区/静态区:初始化的全局变量静态变量******没有初始化的全局变量静态变量********堆区(地址由小到大)栈区(地址由大到小,先进后出,出了作用域就被销毁)


2,
(1,在iOS中,堆区的内存是所有应用程序共享的。
(2,堆区的内存分配是由系统来负责的
(3,系统使用一个链表来维护所有已经分配过的内存空间。
(4,系统只是记录分配了多少字节给应用程序,并不管理具体的类型。
(5,当一个变量的引用计数为0,说明没有任何变量使用该空间,系统就会回收该内存。
(6,如果变量使用完之后不及时释放内存,那么该内存区域会被永远占用,造成内存泄露。
(7,野指针:当对象已经被释放,但是变量的指针仍指向该内存地址,此时再向该变量发送消息,就会报告野指针错误。

二:Block

1,基本概念:是一个数据类型,是一个代码单元,可以当做参数传递,可以当做返回值。
定义时,把block当成数据类型;
执行时,把block当成函数;






默认,不允许block内部修改外部数值。除非,外部变量类型前加 __block  修饰符号,再经block内部修改后,其指针地址也变为指向堆区。


2,Block常见面试题

答:10
思考:在定义block时,如果引用了外部变量,会对外部变量进行copy,记录下定义block时外部变量的值(把栈区地址copy到堆区)。即使后续外部变量变化,不会对block产生影响。




三:Block反向传值

经常能跟代理互相替换





四:自动布局初步

什么是自动布局:简单讲,就是参照两个字



0 0
原创粉丝点击