iOS开发 - 几道面试题

本文针对iOS并发编程中的几个常见概念进行了详细的解析,包括串行队列SerialDispatchQueue的工作原理、NSArray的拷贝机制、nil对象的消息传递行为以及KVO回调的执行特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
背景是昨天看到群里有人发面试题,然后一群人就在那里讨论,看完之后我觉得这几道题写的挺好的,所以这里简单的来解释下,首先答案是:对,错,对,错(这个结果应该是对的,不确定的可以自行去查看资料)
1.串行队列Serial Dispatch Queue中的block都在同一个线程里执行,因为这是一个串行队列,串行队列是一个block,队列中有排队执行的任务,每个人物又是一个block,任务对应的block都在队列这个大的block中执行,所以他们都是在同一个block中执行的是正确的。
2.NSArray默认是浅拷贝,默认为copy,是浅拷贝,mutableCopy是深拷贝,这个copy当时群里讨论了许久,使用了copy会对使用对象进行copy,拷贝的是指针,而不是内存地址,copy了就会创建一个新的对象,它和原来的被拷贝对象指针不同,内存地址是一样的,当对拷贝后的对象字符串或者原来的对象字符串进行直接赋值,比如str=@“Hello”;内存地址会改变,指针不变。如果是对copy后的对象进行赋值,原对象地址不变,新的对象会重新分配一块新的内存地址,指针不变。对mutableCopy而言,因为是深拷贝,所以内存地址直接改变,指针也改变。
3对nil对象发送消息是有默认返回值的,返回值根据发送消息的类型而不一样,为0,为NO,或者为空的结构体,也有可能会返回nil的消息,但是一定会有消息返回,在cocoa中的几种模式中有专门应用。
4.KVO回调都是在主线程这句话没错,错在他们是同步执行的,程序中我们用到KVO的地方有很多,然而执行的速度是很快的,并没有发生排队执行的情况,所以说明它的回调是异步执行的,否则主线程必定会出现被卡住的情况,而在实际应用中,是没有的。仔细想想也不可能是同步执行的,用到KVO的地方太多,都排着队执行,程序执行肯定会存在延时。

以上是博主的个人见解和群里人讨论后的一些见解,细节地方,感兴趣的朋友可以自己去详细分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值