iOS开发高级程序员面试题-答案
搜狐 2022 iOS工 程师面试题(求职面试回答资料)

搜狐2022 iOS工程师面试题第1题:单选题1、以下哪一段代码不会抛出特别()A、NSArray *array=@[1,2,3];NSNumber * number=array[3];B、NSDictionary *dict=@{@"key":nil};C、NSString *str=nil;NSString *str2=[str substringFromIndex:3];D、NSString *str=@"hi";NSString *str2=[str substringFromIndex:3];1、CA:OC数组中的元素不能是基本数据类型,必需是对象,并且array[3]下标越界,Xcode编译时报错B:字典中键值对不能为nil,运行时崩溃C:OC中向空对象发送消息,不执行任何操作,不报错,不崩溃D:数组下标越界,运行时崩溃第2题:2、delegate中的property使用以下哪个属性()A、assignB、retainC、copyD、strong2、Adelegate中文叫做托付,通常会用在class内部把一些大事处理"托付"给别人去完成。
为什么我们不用retain而要用assign呢?缘由就是在于iOS的reference counting的环境中,我们必需解决circular count的问题。
第3题:3、C和Objective-C的混合使用,以下描述错误的是()A、cpp文件只能使用C/C++代码B、cpp文件include的头文件中,可以消失objective-C的代码C、mm文件中混用cpp直接使用即可D、cpp使用objective-C的关键是使用接口,而不能直接使用代码3、Bobj-c 的编译器处理后缀为m 的文件时,可以识别obj-c 和c 的代码,处理mm 文件可以识别obj-c,c,c++ 代码,但cpp 文件必需只能用c/c++ 代码,而且cpp 文件include 的头文件中,也不能消失obj-c 的代码,由于cpp 只是cpp第4题:4、关于Objective-C中属性的说明,以下错误的是()A、readwrite是可读可写特性,需要生成getter方法和setter方法B、readonly是只读特性,只有getter方法,没有setter方法C、assign是赋值属性,setter方法将传入参数赋值给实例变量D、retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象4、DCopy是创建一个新对象,Retain是创建一个指针,引用对象计数加1。
史上最全的iOS面试题及答案

史上最全的iOS面试题及答案1. 1.写一个NSString类的实现+ (id)initWithCString:(c*****t char *)nullTerminatedCStringencoding:(NSStringEncoding)encoding;+ (id) stringWithCString: (c*****t char*)nullTerminatedCStringencoding: (NSStringEncoding)encoding{NSString *obj;obj = [self allocWithZone: NSDefaultMallocZone()];obj = [obj initWithCString: nullTerminatedCString encoding: encoding];return AUTORELEASE(obj);}2static 关键字的作用:(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
3线程与进程的区别和联系?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
程和线程的主要差别在于它们是不同的操作系统资源管理方式。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
ios面试题及答案

ios面试题及答案1.uiview 和 calayer 是什么关系?•uiview 继承 uiresponder,而 uiresponder 是响应者对象,可以对ios 中的事件响应及传递,calayer 没有继承自 uiresponder,所以 calayer 不具备响应处理事件的能力。
calayer 是 quartzcore 中的类,是一个比较底层的用来绘制内容的类,用来绘制ui•uiview 对 calayer 封装属性,对 uiview 设置frame、center、bounds 等位置信息时,其实都是uiview 对 calayer 进一层封装,使得我们可以很方便地设置控件的位置;例如圆角、阴影等属性, uiview就没有进一步封装,所以我们还是需要去设置 layer 的属性来实现功能。
•uiview 是 calayer 的代理,uiview 持有一个 calayer 的属性,并且是该属性的代理,用来提供一些 calayer行的数据,例如动画和绘制。
2.bounds 和 frame 的区别?•bounds:一般是相对于自身来说的,是控件的内部尺寸。
如果你修改了 bounds,那么子控件的相对位置也会发生改变。
•frame :是相对于父控件来说的,是控件的外部尺寸。
3.setneedsdisplay 和 layoutifneeded 两者是什么关系?[图片上传失败...(image-fe66cb-)]uiview的setneedsdisplay和setneedslayout两个方法都是异步执行的。
而setneedsdisplay会自动调用drawrect方法,这样可以拿到uigraphicsgetcurrentcontext进行绘制;而setneedslayout会默认调用layoutsubviews,给当前的视图做了标记;layoutifneeded 查找是否有标记,如果有标记及立刻刷新。
ios开发工程师面试题

ios开发工程师面试题1. 演示你对iOS开发的理解和经验在这个部分中,可以回答以下问题:- 对iOS开发的理解是什么?- 你有多少年的iOS开发经验?- 在过去的项目中,你使用过哪些编程语言和框架?- 你最擅长的iOS开发方向是什么(如UI布局、网络通信、数据库等)?2. 解释什么是MVC模式,以及在iOS开发中如何应用在这个部分中,可以回答以下问题:- 什么是MVC模式?它由哪三个部分组成?- 在iOS开发中,Model部分通常负责什么?- 在iOS开发中,View部分通常负责什么?- 在iOS开发中,Controller部分通常负责什么?- 你在实际项目中如何应用MVC模式?3. 解释什么是Delegate模式,在iOS开发中如何应用在这个部分中,可以回答以下问题:- 什么是Delegate模式?它的优点是什么?- iOS开发中常见的Delegate模式的应用场景有哪些?- 在使用Delegate模式时,通常需要实现哪些方法?4. 什么是KVC和KVO,在iOS开发中如何使用在这个部分中,可以回答以下问题:- 什么是KVC(Key-Value Coding)?在哪些场景下使用KVC?- 什么是KVO(Key-Value Observing)?在哪些场景下使用KVO?- 在使用KVC和KVO时,常见的注意事项是什么?5. 请解释一下iOS中多线程和GCD在这个部分中,可以回答以下问题:- 什么是多线程?为什么在iOS开发中需要使用多线程?- GCD(Grand Central Dispatch)是什么?它有哪些优点?- 在iOS开发中,怎样使用GCD来实现多线程操作?6. 在开发过程中,你如何进行性能优化和内存管理在这个部分中,可以回答以下问题:- 在iOS开发中,常见的性能优化手段有哪些?- 在iOS开发中,常见的内存管理方法有哪些?- 你在实际项目中如何进行性能优化和内存管理?7. 请分享一下你在iOS开发中遇到的困难和解决方法在这个部分中,可以回答以下问题:- 在iOS开发中,你曾经遇到过哪些困难和挑战?- 你是如何解决这些问题的?是否有什么经验教训可以分享?8. 请分享一下你最骄傲的iOS开发项目在这个部分中,可以回答以下问题:- 你在iOS开发中参与过哪些项目?有没有特别骄傲的项目?- 请分享一下这个项目的背景和你在其中的角色和贡献。
2023年职场_ios面试题及答案

2023年ios面试题及答案ios面试题及答案(一)1. 原子(atomic)跟非原子(non-atomic)属性有什么区别?01. atomic提供多线程安全。
是防止在写未完成的时候被另外一个线程读取,造成数据错误02. non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。
2. 看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什么?NSMutableArray__ ary = [[NSMutableArray array] retain];NSString __str = [NSString stringWithFormat:@"test"];[strretain];[aryaddObject:str];NSLog(@”%@%d”,str,[str retainCount]);[strretain];[strrelease];[strrelease];NSLog(@”%@%d”,str,[str retainCount]);[aryremoveAllObjects];NSLog(@”%@%d”,str,[str retainCount]);str的retainCount创建+1,retain+1,加入数组自动+1 3retain+1,release-1,release-1 2数组删除所有对象,所有数组内的对象自动-1 13. 类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。
iOS面试题集锦(附答案)(个人精心整理)

iOS⾯试题集锦(附答案)(个⼈精⼼整理)1、第三⽅库、masonry第三⽅⾃动布局是否⽤过,类⽅法和对象⽅法的区别2、MVC机制C对M:APIC对V:OutletV对C:T arget-action,Delegate,DatasourceM对C:Notification,KVO3、runtime机制runtime是⼀套⽐较底层的纯C语⾔API, 属于1个C语⾔库, 包含了很多底层的C语⾔API。
runtime ⽤来⼲什么呢??⽤在那些地⽅呢?怎么⽤呢?runtime是属于OC的底层, 可以进⾏⼀些⾮常底层的操作(⽤OC是⽆法现实的, 不好实现)在程序运⾏过程中, 动态创建⼀个类(⽐如KVO的底层实现)在程序运⾏过程中, 动态地为某个类添加属性\⽅法, 修改属性值\⽅法遍历⼀个类的所有成员变量(属性)\所有⽅法例如:我们需要对⼀个类的属性进⾏归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使⽤了runtime就可以动态设置!1>头⽂件利⽤头⽂件,我们可以查看到runtime中的各个⽅法!2>相关应⽤NSCoding(归档和解档, 利⽤runtime遍历模型对象的所有属性)字典–>模型(利⽤runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)KVO(利⽤runtime动态产⽣⼀个类)⽤于封装框架(想怎么改就怎么改)这就是我们runtime机制的只要运⽤⽅向3>相关函数objc_msgSend : 给对象发送消息class_copyMethodList : 遍历某个类所有的⽅法class_copyIvarList : 遍历某个类所有的成员变量class_…..这是我们学习runtime必须知道的函数!4.必备常识1> Ivar : 成员变量2> Method : 成员⽅法从上⾯例⼦中我们看到我们定义的成员变量,如果要是动态创建⽅法,可以使⽤Method,4、strong ,weak, assign有什么区别assign:简单赋值,不更改索引计数(Reference Counting)。
高级程序员面试题及答案(完整版)

高级程序员面试题及答案1.请介绍你在项目中所负责的任务和职责。
答案:在项目中,我主要负责需求分析、设计、编码和测试等工作。
我通过与产品经理和客户沟通,理解需求,并确定技术实现方案,进行系统设计和架构。
同时,我也会与开发团队协作,编写高质量的代码,保证项目进度和质量。
此外,我也负责测试和维护,确保产品的稳定性和可靠性。
2.请谈谈你的开发经验。
答案:我拥有丰富的开发经验,在多个项目中担任过主要开发者和技术负责人。
我能够使用多种编程语言和框架,包括Java、Python、Ruby、Node.js等等。
我也精通多个数据库技术,如MySQL、Oracle、MongoDB等等。
我还有很强的算法和数据结构能力,能够解决复杂的问题。
3.请谈谈你对软件开发的理解。
答案:我认为软件开发不仅仅是编写代码,还需要深入理解业务需求,并将其转化为技术实现方案。
软件开发需要不断学习和改进,关注技术趋势和最佳实践,保证代码的可维护性和扩展性。
同时,软件开发也需要与团队协作,包括产品经理、设计师、测试人员等等,确保项目的成功。
4.请谈谈你在代码质量方面的经验和思路。
答案:在我的工作中,我非常注重代码质量,包括可读性、可维护性、可扩展性和可测试性等方面。
我会使用代码规范和最佳实践来编写高质量的代码。
我还会使用单元测试和集成测试等技术来保证代码的质量和稳定性。
此外,我也会使用代码审查等工具来帮助发现潜在的问题。
5.请谈谈你对RESTful API的理解和使用经验。
答案:我对RESTful API有着深刻的理解和使用经验。
RESTful API是一种基于HTTP协议的API设计风格,它强调资源的URI和HTTP动词的使用。
我会遵循RESTful API的设计原则,使用标准的HTTP动词(GET、POST、PUT、DELETE等),并使用恰当的HTTP状态码和响应格式。
我也会使用Swagger等工具来生成API 文档和进行测试。
6.请谈谈你在数据库方面的经验和能力。
iOS开发方面的一些面试题

前言今天某某提供的一份面试题,郑州iOS培训看了看,还是整理一下,分享给大家吧。
对于新手、刚出来找工作的或者准备要面临找工作的小伙伴们来说,笔者所提供的参考答案一定会有帮助的。
题照1、#import和#include的区别,@class代表什么?参考答案:这里老生常谈的问题了!#import和#include指令都是用于包含头文件的,前者是保证只会包含一次,不会重复包含;后者是c语言中原来就有的包含头文件的指令,在objc开发中,若是c文件,一件会使用#include指令来包含头文件,为了防止重复包含,通常会加上条件编译,如:1 2 3 4 5 6 7 8 9// 随手写的例子// 若已经定义过则不再定义之,这是防止重复包含的手段#ifndef __HYB__GRIDVIEWCONTROLLER__#define kScreenWidth ...#endif@class是类前向声明的指令,相当于告诉编译器有这样一个类,但是类的定义在后面提供。
在编译时期,编译器看到@class指令声明了对应的类型,是可以正常编译过的。
这是很常用的指令,主要是防止循环引用。
如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
2、谈谈Objective-C的内存管理方式及过程参考答案:对于Objective-C,在MRC下内存是手动管理的,而在ARC下,我们不用手动去添加retain/release,但是其内存管理法则是一样的。
内存管理黄金法则:谁使对象的引用计数+1,谁就负责管理使该对象的引用计数-1。
说说内存管理的过程:在MRC下,对于需要手动释放的对象的内存管理,我们通过release使对象引用计数-1,若其引用计数变成0,则对象会被立刻释放掉。
对于autorelease交给自动释放池管理的对象,每个runloop循环结束就会去自动释放池中使所有autorelease类型对象的引用计数减一,若变成0,则释放之。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、判断题(每题2分,共20分)
1、UITableView能够绑定多个数据源。
(错)
2、一个UIViewController可以管理多个UITableView。
(对)
3、Object-c的类可以多重继承。
(错)
4、objective-c类里面的方法只有两种, 静态方法和实例方法。
(对)
5、NSFileManager和NSWorkspace在使用时都是基于进程进行单件对象的实例化。
(对)
6、用类别增加方法时,不能与原来类中的方法产生名称冲突。
(错)
7、frame指的是该view在本身坐标系统中的位置和大小。
(错)
8、method是一个方法的名字,selector是一个组合体。
(错)
9、ARC是编译特性,不是运行时特性,在编译时,编译器会自动加上释放代码。
(对)
10、从iOS4之后,Safari支持全屏浏览,Siri支持普通话。
(对)
二、填空题(每空2分,共20分)
1、iOS是使用Objective-C语言编写的,使用该语言开发的Cocoa是一款功能强大的用户界面工具包,也是iOS的核心。
2、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。
链表恰好相反,其中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。
3、发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。
而发送异步请求不会阻塞主线程,会建立一个新的线程来操作,之后程序可以继续运行。
页脚内容1
4、autorelease只是把Object放入了当前的autorelease pool中,当它被释放时,其中的所有Object都会被调用Release。
5、作为Objective-C导入头文件的关键字,#import<>用来包含系统的头文件,#import””用来包含用户头文件。
三、简述题(每题4分,共20分)
1、delegate和notification有什么区别,什么情况下使用?
答:delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。
通常发送者和接收者的关系是直接的一对多的关系。
notification:消息的发送者告知接收者事件已经发生或者将要发生,仅此而已,接收者并不能反过来影响发送者的行为。
通常发送者和接收者的关系是间接的多对多关系。
2、Object-C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?
答:线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue。
在主线程执行代码,方法是performSelectorOnMainThread。
如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone。
3、iOS有哪些数据持久化方式?
答:四种:属性列表、对象归档、SQLite3和Core Data。
页脚内容2
4、Objective-C如何对内存管理的,说说你的看法和解决方法?
答:Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
解决方法的话:谁持有,谁释放。
5、如何对iOS设备进行性能测试?
答:Profile-> Instruments ->Time Profiler。
四、问答题(每题10分,共20分)
1、什么是MVC,为什么使用MVC,有什么好处?描述一下iOS SDK中如何实现MVC的开发模式。
答:MVC分别为:模型(Model),视图(View)和控制Controller)。
模型(Model):即“数据模型”,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
“模型”有对数据直接访问的权力,例如对数据库的访问。
视图(View):视图层能够实现数据有目的显示。
控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。
对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。
所有的用户数据都是模型层,它应该独立于视图。
所有的ViewController都是控制层,由它负责控制视图,访问模型数据。
2、请阐述UIViewController的生命周期,包括代码的执行顺序。
答:当一个视图控制器被创建,并在屏幕上显示的时候。
代码的执行顺序
// 视图显示在屏幕上的顺序
页脚内容3
1、alloc 创建对象,分配空间。
2、init (initWithNibName) 初始化对象,初始化数据。
3、viewload 从nib载入视图, 这一步不需要去干涉。
除非没有使用xib文件创建视图。
4、viewDidLoad 加载完毕,可以进行自定义数据以及动态创建其他控件。
5、viewWillAppear 视图将出现在屏幕之前,马上这个视图即将显示在屏幕上。
6、viewDidAppear 视图已在屏幕上渲染完成。
// 视图将被从屏幕上移除的顺序
1、viewWillDisappear 视图将被从屏幕上移除之前执行。
2、viewDidDisappear 视图已经被从屏幕上移除。
3、dealloc 视图被销毁,此时需要在init和viewDidLoad中创建的对象进行释放。
4、viewDidUnload 出现内存警告在内存不足时执行,并对所有非当前显示的controller执行。
本视图的所有子视图将被销毁,以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。
因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。
五、论述题(20分)
请针对正泰中自智慧水务APP的需求(见现场展示的原型),论述您的开发思路和使用的开发技术。
页脚内容4
页脚内容5。