iOS开发高级程序员面试题-答案
一、判断题(每题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、发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。
而发送异步请求不会阻塞主线程,会建立一个新的线程来操作,之后程序可以继续运行。
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。
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的生命周期,包括代码的执行顺序。
答:当一个视图控制器被创建,并在屏幕上显示的时候。
代码的执行顺序
// 视图显示在屏幕上的顺序
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的需求(见现场展示的原型),论述您的开发思路和使用的开发技术。
搜狐 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 高级面试题Introduction在进行 IOS 高级面试时,掌握一些常见的面试题和思路非常重要。
本文将为你提供一些常见的 IOS 高级面试题目,帮助你备战面试并展示自己的技术能力和经验。
1. Objective-C 部分Objective-C 是 IOS 开发中最常用的编程语言之一,下面是一些关于Objective-C 的高级面试题目:1.1 类与对象- 请解释 Objective-C 中类和对象的概念,并举例说明。
- 什么是类的继承?如何使用继承来实现代码的重用?- 什么是类别和扩展?它们有什么区别?- 请解释使用 @property 和 @synthesize 的作用。
1.2 内存管理- 请解释 ARC(Automatic Reference Counting)是什么?它如何帮助我们管理内存?- 什么是循环引用?如何避免循环引用的发生?- 在MRC(Manual Reference Counting)中,你是如何管理内存的?1.3 Blocks- 什么是 Blocks?它们在 IOS 开发中的具体应用是什么?- __block 和 __weak 关键字的作用分别是什么?2. Swift 部分Swift 是一种相对较新的编程语言,被广泛应用于 IOS 开发。
下面是一些关于 Swift 的高级面试题目:2.1 基础语法- 请解释Swift 中的可选类型(Optional)是什么?它们有什么作用?- Swift 中的结构体和类有什么区别?- 什么是属性观察器(property observers)?请举例说明如何使用属性观察器。
2.2 Protocols and Extensions- 请解释 Protocol 在 Swift 中的作用,并讨论它与继承的异同。
- 什么是扩展(Extension)?请举例说明如何使用扩展来为已有的类添加新的功能。
2.3 Error Handling- Swift 中的错误处理是如何工作的?请解释 try、catch 和 throw 的作用。
ios高级开发面试题
ios高级开发面试题iOS开发在近年来得到了广泛的关注和应用。
为了在这个竞争激烈的领域中脱颖而出,对于iOS高级开发者来说,掌握一些核心的技术和知识点是非常重要的。
本文将从技术、设计、性能等方面探讨一些iOS高级开发面试题,帮助读者了解iOS开发的一些关键点。
一、架构与设计1. 请解释什么是MVC架构?它在iOS开发中的应用场景有哪些?MVC(Model-View-Controller)是一种软件设计模式,主要由三个部分组成:模型(Model)、视图(View)和控制器(Controller)。
在iOS开发中,MVC经常用来分离应用中的数据、用户界面和业务逻辑。
模型负责处理数据和业务逻辑,视图负责展示用户界面,而控制器则负责协调模型和视图之间的通讯。
2. 什么是单例模式?在iOS开发中如何实现单例模式?单例模式是一种创建型设计模式,它确保一个类只能创建一个实例,并提供全局访问点。
在iOS开发中,可以通过以下方式实现单例模式:```swiftclass Singleton {static let shared = Singleton()private init() {}}```通过使用`static let`关键字,我们可以创建一个静态的共享实例,而`private init()`则确保该类无法在外部被实例化。
二、性能优化1. 在iOS开发中,什么是视图重用?为什么需要进行视图重用?视图重用是指在滚动视图(如UITableView和UICollectionView)中重复使用视图,以减少内存占用和提高性能。
在列表或网格视图中,当某个视图滚出屏幕时,可以将其重用来显示新的内容,而不是创建一个全新的视图。
视图重用可以有效地减少内存开销和提高滚动性能,特别是在数据量较大的情况下。
通过使用复用标识符和重用队列,我们可以轻松地重用视图并更新其内容。
2. 在进行网络请求时,如何避免引起内存泄漏?内存泄漏是指应用程序中无用的内存对象无法被垃圾回收器回收的情况。
ios 高级工程师面试题
ios 高级工程师面试题iOS 开发领域一直都是人才需求量较高的领域,而作为一个高级工程师,你需要具备一定的技术深度和广度,同时还需要有解决实际问题的能力和经验。
下面是一些常见的 iOS 高级工程师面试题,希望能帮助你更好地准备面试。
一、Objective-C 部分1. 什么是 Category,如何使用?请列举一个你在实际项目中使用Category 的例子。
2. 什么是 KVC 和 KVO?它们之间有什么区别和联系?3. 什么是Block,如何使用?请解释下循环引用问题以及解决方案。
4. 什么是 autorelease pool,在什么情况下会用到?请解释内存管理机制中的 autorelease pool 是如何工作的。
5. 什么是 Run Loop,它在 iOS 开发中的作用是什么?请说明主线程和子线程中 Run Loop 的差异。
6. 什么是 ARC,它与 MRC 的区别是什么?在 ARC 下,如何处理循环引用问题?二、Swift 部分1. 什么是 Optional 类型,如何使用?请解释为什么 Swift 中引入了Optional 类型。
2. 什么是 Protocol,如何使用?请解释下 Protocol 和 Class 之间的关系。
3. 什么是 Value Type 和 Reference Type,它们之间有什么区别和联系?4. 什么是委托模式(Delegation Pattern),如何在 Swift 中实现?5. 什么是 Swift 中的泛型(Generics)?请解释下泛型在自定义数据结构中的作用。
6. 什么是内存管理,Swift 是如何处理内存管理的?三、iOS 开发部分1. 简述 UIViewController 的生命周期方法及各个方法的调用顺序。
2. 什么是Autolayout,如何使用?请解释下Autolayout 的工作原理。
3. 什么是 Core Data,如何使用?请解释下 Core Data 的基本原理。
