欢迎来到皮皮网网首页

【大理源码建站】【刻录审计 源码】【漫画手机源码】ios block 源码

来源:七夕表白门户网站源码 时间:2024-11-24 20:00:52

1.ios block和delegate的源码区别
2.ios中block的三种形式
3.ios中block和weak的区别
4.ios开发block为空了为什么
5.ios block和代理的区别

ios block 源码

ios block和delegate的区别

       1.共同的作用:Block 和 Delegate中的方法都可以理解成回调函数,当某件事情发生的源码时候取执行一段代码片段2.Block(代码块)优点:是一种轻量级的回调,能够直接访问上下文,源码使用块的源码地方和块的实现地方在同一个地方,使得代码组织更加连贯3.Delegate(代理)相对来说是源码大理源码建站重量级的回调,缺点: 因方法的源码刻录审计 源码声明和实现分离开来,代码的源码连贯性不是很好 代理很多时候需要存储一些临时数据优点: 代理的回调函数可以是一组多个函数,在不同的源码时机调用不同的回调函数4.如何选择使用哪一种 1.当回调函数多于3个的时候,采用代理比较好 2.使用代码块容易造成循环引用,源码代理不会出现该问题 3.其他情况下优先考虑代码块Block分为三种:临时性的源码,只用在栈当中,源码不会存储起来。源码比如数组的源码漫画手机源码 foreach 遍历,这个遍历用到的源码 block 是临时的,不会存储起来。源码需要存储起来,但只会调用一次,delphi 源码查看或者有一个完成时期。比如一个 UIView 的动画,动画完成之后,需要使用 block 通知外面,地球末日源码一旦调用 block 之后,这个 block 就可以删掉。需要存储起来,可能会调用多次。比如按钮的点击事件,假如采用 block 实现,这种 block 就需要长期存储,并且会调用多次。调用之后,block 也不可以删除,可能还有下一次按钮的点击ios block和delegate的区别

ios中block的三种形式

        Block有三种类型:

        我们在讲 block的本质 的时候已经知道了,block的本质就是一个 OC 对象,那么既然它是一个 OC 对象,它就会有类型,本文就将讲解 block 的三种类型.并都继承于NSBlock

        我们在讲 block 的三种类型之前,先了解一下程序的内存分配情况,因为不同类型的 block 分配的内存也不同.

        结论: 没有访问 auto变量 的block 就是 __NSGlobalBlock

        结论:访问了auto变量 的block 就是 __NSStackBlock

        怎么打印的是NSMallocBlock,刚才不是说访问了auto变量就是__NSStackBlock吗?

        因为这里我们使用的是ARC,在ARC环境下,Xcode编译器再某些情况会默认帮我们做调用copy 变成堆block ,我们在Build Settings中把ARC设置成MRC,再来打印一下:

        这次打印的就是NSStackBlock

        我们思考一下,__NSStackBlock在访问外部变量时,会有什么问题?

        会出现野指针crash 所以在ARC坏境Xcode帮我们处理成了堆block(NSMallocBlock)防止出现释放了还去访问导致野指针crash

        结论: 当一个__NSStackBlock调用了copy操作,返回的就是一个__NSMallocBlock

        以上都是在MRC环境下

如果是在ARC环境下,编译器会根据情况自动将栈上的block复制到堆上, 比如以下几种情况:

        1:一共有三种类型的Block.分为__NSGlobalBlock,__NSStackBlock,__NSMallocBlock.

        没有访问 auto变量 的block 就是 __NSGlobalBlock

        访问了auto变量 的block 就是 __NSStackBlock

        当一个__NSStackBlock调用了copy操作,返回的就是一个__NSMallocBlocksing

        2:在ARC环境下,编译器会自动把栈上的block copy到堆上

ios中block和weak的区别

       trong和weak的区别

       strong表示保留它指向的堆上的内存区域不再指向这块区域了。

       ä¹Ÿå°±æ˜¯è¯´æˆ‘强力指向了一个区域,我们不再指向它的条件只有我们指向nil或者我自己也不在内存上,没有人strong指向我了,weak表示如果还没有人指向它了,它就会被清除内存,同时被指向nil,因为我不能读取不存在的东西。

       weak只在IOS5.0使用

       è¿™å¹¶ä¸æ˜¯åžƒåœ¾å›žæ”¶ï¼Œæˆ‘们用reference count表示堆上还有多少strong指针,当它变为0就马上释放。

       æœ¬åœ°å˜é‡éƒ½æ˜¯strong,编辑器帮你计算

ios开发block为空了为什么

       block 一般情况是完成回调(数据回传)如果不需要数据回传,那么就可以为空

ios block和代理的区别

       é¦–先两者作用是一样的,都是进行单一回调。

       ä¸é€šçš„是,delegate是个对象,然后用过一个对象自己调用代理协议函数来完成整个流程。

       block是传递一个函数指针,利用函数指针执行来进行回调。

       è¿˜æœ‰åœ¨å†…存管理上需要注意,delegate不需要保存引用。block对引用数据有copy的处理。