当前位置:首页 > 科技动态 > 正文

block为什么用weak

block为什么用weak

iOS开发面试拿offer攻略之block篇 即如果对栈 Block 进行 cop ,将会 copy 到堆区,对堆 Block 进行 copy ,将会增加引用计数,对全...

iOS开发面试拿offer攻略之block篇

即如果对栈 Block 进行 cop ,将会 copy 到堆区,对堆 Block 进行 copy ,将会增加引用计数,对全局 Block 进行 copy ,因为是已经初始化的,所以什么也不做。

第一家:内推至某大型外包,前前后后面试了5次,拉扯了有两周左右。原因包括毕业前的工作经验不被大认可,在对方眼里只有不到两年的工作经验,且期望薪资超出定薪限额。技术面三次,每次半小时左右,偏向某个方面,会问实现过程。第二家:创业,母在北京,融资已到C轮,这边是孵化项目。

面试题:Block为什么用Copy修饰

原因:block会把写在block里的变量copy一份,如果直接在block里使用lf,(lf对变量默认是强引用)lf对block持有,block对lf持有,导致循环引用,所以这里需要声明一个弱引用weakSelf,让block引用weakSelf,打破循环引用。

在编程中,特别是在Objective-C和Swift这样的语言中,使用copy来处理block的原因主要有以下几点:所有权语义:确保变量访问有效性:block具有自动捕获其所在作用域内变量的能力。如果不block,当原始作用域被销毁或变量被释放后,再调用block可能会导致访问无效的内存,引发崩溃。

Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block)。

block 本质上是一个OC对象,内部有个 isa 指针,可以用 retain/strong/copy 等修饰词修饰。但是 block 在创建的时候内存默认分配在栈上,而不是堆上的。所以它的作用域仅限创建时候的作用域内,当你在该作用域外调用该 block 时,程序就会崩溃。

Block 用 copy 关键字的原因:Block 默认存储在栈上,copy 到堆上才能保证生命周期。网络网络七层协议:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。Http 和 Https 的区别及 Https 更安全的原因:Http:明文传输,不安全。Https:通过 SSL/TLS 加密传输,更安全。

iOS开发中的循环引用

1、循环引用的实质是,多个对象之间相互强引用,导致不能释放,让回收。iOS开发中常见的循环引用主要是由Dgate、NSTimer和block引起。dgate是开发中比较常见到的循环引用,一般在声明dgate的时候,都需要使用弱引用weak或者assign。

2、Unmanaged:适用于与 Core Foundation 和其他非 ARC 管理的 C APIs 互操作,可以手动管理引用计数,但增加了开发复杂性和出错风险。在实际开发中,应根据具体需求选择合适的引用类型,以平衡性能和安全性。同时,注意避免内存泄漏和循环引用等问题,确保应用的稳定性和性能。

3、在iOS开发中,使用weak关键字的情况主要有以下几种:解决循环引用问题:场景描述:当两个或多个对象相互持有对方的强引用时,会导致循环引用,使得这些对象无法被内存管理回收,从而引发内存泄漏。

4、在iOS开发中,循环引用常常发生在使用Block、Dgate和通知等机制时。为了避免循环引用,可以使用weak、strong和copy等关键字来修饰对象,明确表达对象之间的拥有关系。使用单例模式单例模式是一种只允许创建一个对象的模式,可以有效地减少内存占用。

5、iOS开发常用底层面试题合集Runtime相关一个objc对象的isa指针指向什么?有什么作用?isa指针指向对象的类(Class),用于标识对象的类型,并关联类的元信息(如方法列表、属性列表等)。在64位中,isa还包含引用计数、弱引用表等额外信息。

最新文章