2021年最新iOS面试题(附答案)

更新时间:2023-04-27 09:57:45 阅读:21 评论:0


2023年4月27日发(作者:合成氨工业)

2021年最新iOS⾯试题(附答案)

最近⼤家都要准备去⾯试或者已经在⾯试的,这⾥我给⼤家准备了挺多资料,可以私信我拿,看看了解下。底下就是我整理出来的⼀些⾯试题

iOS 类(class)和结构体(struct)有什么区别?

Swift 中,类是引⽤类型,结构体是值类型。值类型在传递和赋值时将进⾏复制,⽽引⽤类型则只会使⽤引⽤对象的⼀个"指向"。所以他们两者之

间的区别就是两个类型的区别。

举个简单的例⼦,代码如下

class Temperature {

var value: Float = 37.0

}

class Person {

var temp: Temperature?

func sick() {

temp?.value = 41.0

}

}

let A = Person()

let B = Person()

let temp = Temperature()

= temp

= temp

复制代码

有想要领取免费资料的可以进裙或者加好友领取,这⾥有⼀个iOS交流圈:1012951431 可以来了解,分享BAT,阿⾥

⾯试题、⾯试经验,讨论技术,裙⾥资料直接下载就⾏, ⼤家⼀起交流学习!

有想要的⾯试资料或者其他资料也可以找我,欢迎咨询!需要的可⾃⾏下载

() 上⾯这段代码,由于 Temperature 是 class ,为引⽤类型,故 A 的 temp 和 B 的 temp指向同⼀个对象。A 的 temp修改了,B 的

temp 也随之修改。这样 A 和 B 的 temp 的值都被改成了41.0。如果将 Temperature 改为 struct,为值类型,则 A 的 temp 修改不影响 B

的 temp。

内存中,引⽤类型诸如类是在堆(heap)上,⽽值类型诸如结构体实在栈(stack)上珍爱生命健康成长 进⾏存储和操作。相⽐于栈上的操作,堆上的操作更加复

杂耗时,所以苹果官⽅推荐使⽤结构体,这样可以提⾼ App 运⾏的效率。

class有这⼏个功能struct没有的:

class可以继承,这样⼦类可以使⽤⽗类的特性和⽅法 类型转换可以在runtime的时候检查和解释⼀个实例的类型 可以⽤deinit来释放资源 ⼀个

类可以被多次引⽤ struct也有这样⼏个优势:

结构较⼩,适⽤于复制操作,相⽐于⼀个class的实例被多次引⽤更加安全。 ⽆须担⼼内存memory leak或者多线程冲突问题

什么是GCD ?谈谈你对GCD的理解?

GCD是Grand Central Dispatch的缩写。

Grand Central Dispatch (GCD)是Apple开发的⼀个多核编程的较新的解决⽅法。在Mac OS X 10.6雪豹中⾸次推出,并在最近引⼊到了

iOS4.0。

GCD是⼀个替代诸如NSThread等技术的很⾼效和强⼤的技术。GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题。

GCD可以完成很多事情,但是这⾥仅关注在iOS应⽤中实现多线程所需的⼀些基础知识。

在开始之前,需要理解是要提供给GCD队列的是代码块,⽤于在系统或者⽤户创建的的队列上调度运⾏。 声明⼀个队列

如下会返回⼀个⽤户创建的队列:

dispatch_queue_t myQueue = dispatch_queue_create("", NULL);

复制代码

其中,第⼀个参数是标识队列的,第⼆个参数是⽤来定义队列的参数(⽬前不⽀持,因此传⼊NULL)。

执⾏⼀个队列

如下会异步执⾏传⼊的代码:

dispatch_async(myQueue, ^{ [lf doSomething]; });其中,⾸先传⼊之前创建的队列,然后提供由队列运⾏的代码块。

声明并执⾏⼀个队列

如果不需要保留要运⾏的队列的引⽤,可以通过如下代码实现之前的功能: dispatch_async(dispatch_queue_create

("", NULL), ^{ [lf doSomething]; });如果需要暂停⼀个队列,可以调⽤如下代码。暂停⼀个队列会阻⽌和该队列相

关的所有代码运⾏。 dispatch_suspend(myQueue);

暂停⼀个队列

如果暂停⼀个队列不要忘记恢复。暂停和恢复的操作和内存管理中的retain和relea类似。调⽤dispatch_suspend会增加暂停计数,⽽

dispatch_resume则会减少。队列只有在暂停计数变成零的情况下才开始运⾏。dispatch_resume(myQueue);

恢复⼀个队列 从队列中在主线程运⾏代码

有些操作⽆法在异步队列运⾏,因此必须在主线程(每个应⽤都有⼀个)上运⾏。UI绘图以及任何对NSNotificationCenter的调⽤必须在主线程

长进⾏。在另⼀个队列中访问主线程并运⾏代码的⽰例如下: dispatch_sync(dispatch_get_main_queue(), ^{ [lf

dismissLoginWindow]; });注意,dispatch_suspend(以及dispatch_resume)在主线程上不起作⽤。

使⽤GCD,可以让你的程序不会失去响应. 多线程不容易使⽤,⽤了GCD,会让它变得简单。你⽆需专门进⾏线程管理轻快的背景音乐 , 很棒!

dispatch_queue_t t1=dispatch_queue_create("1" ,NULL);

dispatch_queue_t t2=dispatch_queue_create("2",NULL);

dispatch_async(t1, ^{

[lf print1];

});

dispatch_async(t2, ^{

[lf print2];

});

复制代码

iOS⾃动释放池是什么,如何⼯作 ?

当您向⼀个对象发送⼀个autorelea消息时,Cocoa就会将该对象的⼀个引⽤放⼊到最新的⾃动释放池。它仍然是个正当的对象,因此⾃动释放

池定义的作⽤域内的其它对象可以向它发送消息。当程序执⾏到作⽤域结束的位置时,⾃动释放池就会被释放,池中的所有对象也就被释放。

1、object-c 是通过⼀种"referring counting"(引⽤计数)头像漫画女 的⽅式来管理内存的, 对象在开始分配内存(alloc)的时候引⽤计数为⼀,以后每当碰到有

copy,retain的时候引⽤计数都会加⼀, 每当碰到relea和autorelea的时候引⽤计数就会减⼀,如果此对象的计数变为了0, 就会被系统销毁.

2、NSAutoreleaPool 就是⽤来做引⽤计数的管理⼯作的,这个东西⼀般不⽤你管的.

3、autorelea和relea没什么区别,只是引⽤计数减⼀的时机不同⽽已,autorelea会在对象的使⽤真正结束的时候才做引⽤计数减⼀.

iOS⼀米高积臣 个tableView是否可以关联两个不同的数据源?你会怎么处理?

答案:⾸先我们从代码来看,数据源如何关联上的,其实是在数据源关联的***⽅法⾥实现的。 因此我们并不关⼼如何去关联他,他怎么关联上,

⽅法只是让我返回根据⾃⼰的需要去设置如相关的数据源。 因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想⼲嘛呢?想让列表

如何显⽰,不同的数据源分区块显⽰?

iOS类别的作⽤?继承和类别在实现中有何区别?

答案:

category 可以在不获悉,不改变原来代码的情况下往⾥⾯添加新的⽅法,只能添加,不能删除修改。 并且如果类别和原来类中的⽅法产⽣名称

冲突,则类别将覆盖原来的⽅法,因为类别具有更⾼的优先级。

类别主要有3个作⽤:

(1)将类的实现分散到多个不同⽂件或多个不同框架中。

(2)创建对私有⽅法的前向引⽤。

(3)向对象添加⾮正式协议。 继承可以增加,修改或者删除⽅法,并且可以增加属性。

从输⼊url到页⾯展⽰到底发⽣了什么从输⼊url到页⾯展⽰到底发⽣了什么

1、输⼊地址

2、浏览器查找域名的 IP 地址

3、浏览器向 web 服务器发送⼀个 HTTP 请求

4、服务器的永久重定向响应

5、浏览器跟踪重定向地址

6、服务器处理请求

7、服务器返回⼀个 HTTP 响应

8、浏览器显⽰ HTML

9、浏览器发送请求获取嵌⼊在 HTML 中的资源(如图⽚、⾳频、视频、CSS、JS等等)

iOS中持久化⽅式有哪些?

属性列表⽂件 -- NSUrDefaults 的存储,实际是本地⽣成⼀个 plist ⽂件,将所需属性存储在 plist ⽂件中

对象归档 -- 本地创建⽂件并写⼊数据,⽂件类型不限

SQLite 数据库 -- 本地创建数据库⽂件,进⾏数据处理

CoreData -- 同数据库处理思想相同,但实现⽅式不同

你在开发过程中常⽤到哪些定时器,定时器时间会有误差吗,如果有,为什么会有误差?

iOS中常NSTimer、CADisplayLink、GCD定时器,其中NSTimer、CADisplayLink基于NSRunLoop实现,故存在误差,GCD定时器只依赖系

统内核,相对⼀前两者是⽐较准时的。

误差原因是:与NSRunLoop机制有关, 因为RunLoop每跑完⼀次野猪英文 圈再去检查当前累计时间是否已经达到定时设置的间隔时间,如果未达

到,RunLoop将进⼊下⼀轮任务,待任务结束之后再去检查当前累计时间,⽽此时的累计时间可能已经超过了定时器的间隔时间,故会存在误

差。

怎样防⽌指针的越界使⽤问题?

必须让指针指向⼀个有效的内存地址,

1、防⽌数组越界

2、防⽌向⼀块内存中拷贝过多的内容

3、防⽌使⽤空指针

4、防⽌改变const修改的指针

5、防⽌改变指向静态英雄联盟情侣id 存储区的内容

6、防⽌两次释放⼀个指针

7、防⽌使⽤野指针.

iOS你在项⽬中⽤过 runtimuntime 吗?举个例未就业证明 ⼦e 吗?举个例⼦

Objective-C 语⾔是⼀门动态语⾔,编译器不需要关⼼接受消息的对象是何种类型,接收消息的对象问题也要在运⾏时处理。

pragramming 层⾯的 runtime 主要体现在以下⼏个⽅⾯:

关联对象 Associated Objects

消息发送 Messaging

消息转发 Message Forwarding

⽅法调配 Method Swizzling

“类对象” NSProxy Foundation | Apple Developer Documentation

KVC、KVO About Key-Value Coding

有想要领取免费资料的可以进裙或者遗憾歌词 加好友领取,这⾥有⼀个iOS交流圈:563513413 可以来了解,分享BAT,阿⾥⾯

试题、⾯试经验,讨论技术,裙⾥资料直接下载就⾏, ⼤家⼀起交流学习!

⽂章到这⾥就结束了,你也可以私信我及时获取⾯试相关资料。如果你有什么意见和建议欢迎给我留⾔。


本文发布于:2023-04-27 09:57:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/850687.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:ios面试题
相关文章
留言与评论(共有 0 条评论)
昵称:
匿名发表 登录账号
         
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图