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小时内删除。
留言与评论(共有 0 条评论) |