block为什么用weak
- 科技动态
- 2025-11-16 06:45:21
- 4

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还包含引用计数、弱引用表等额外信息。
本文链接:http://www.hoaufx.com/ke/1495853.html