ios面试试题
- 格式:docx
- 大小:33.86 KB
- 文档页数:19
ios面试题iOS开发是近年来非常热门和具有挑战性的技术领域之一。
在面试过程中,面试官通常会提出一系列的iOS面试题,以评估应聘者的技术能力和经验。
本文将介绍一些常见的iOS面试题,并提供详细的解答。
1. 请解释MVC设计模式在iOS开发中的作用及优势。
答:MVC(Model-View-Controller)是一种常用的软件设计模式,用于将应用程序的数据、用户界面和业务逻辑进行分离。
在iOS开发中,MVC设计模式有以下作用和优势:- 分离数据和界面:将数据(Model)和用户界面(View)进行分离,使得设计更加清晰和可维护。
- 降低耦合性:通过Controller充当数据和界面之间的中介,实现它们之间的解耦。
- 提高重用性:由于数据、界面和业务逻辑分离,可以更方便地对它们进行重用,提高开发效率。
- 方便协同开发:开发团队可以根据MVC的结构,分工协作,保证项目的高效进行。
2. 请解释UIKit和Foundation框架的区别。
答:UIKit和Foundation是iOS开发中两个重要的框架。
- UIKit是一个用户界面框架,提供了开发iOS应用程序的基础组件,如按钮、标签、文本框等。
它是建立在Core Graphics和Core Animation之上,用于构建用户友好的界面。
- Foundation是一个基础框架,提供了iOS开发中常用的核心功能和数据结构,如字符串处理、日期处理、文件管理等。
它是建立在C语言的基础上,为iOS开发者提供了一系列方便的API。
3. 请解释iOS的生命周期及其对应的方法。
答:iOS应用的生命周期指的是应用从启动到关闭的整个过程,常见的生命周期方法有以下几个:- `application:didFinishLaunchingWithOptions:`:应用程序加载完成后第一个调用的方法,用于初始化应用的数据和设置。
- `applicationWillEnterForeground:`:应用从后台返回前台时调用,可以在该方法中进行数据更新和界面刷新等操作。
2020ios面试题及答案一、单项选择题(每题 2 分,共 10 题)1. iOS 开发中,以下哪个不是 UIKit 框架的一部分?A. UIViewB. UIButtonC. UINavigationControllerD. CoreData答案:D2. 在 Swift 中,以下哪个关键字用于定义常量?A. varB. letC. classD. func答案:B3. 下列哪个选项是 Swift 中的集合类型?A. StringB. IntC. ArrayD. Float答案:C4. 在 iOS 中,哪个类用于处理应用生命周期事件?A. UIApplicationB. UIWindowC. UIViewControllerD. AppDelegate答案:D5. 下列哪个是 Swift 中的控制流语句?A. ifB. classC. structD. protocol答案:A6. 在 iOS 开发中,哪个框架用于网络请求?A. UIKitB. FoundationC. CoreGraphicsD. URLSession答案:D7. Swift 中的可选类型用哪个关键字表示?A. varB. letC. optionalD. nil答案:C8. 在 iOS 中,哪个方法用于添加通知监听器?A. addObserverB. removeObserverC. postNotificationD. addObserverForName答案:D9. 在 Swift 中,哪个关键字用于定义协议?A. classB. protocolC. structD. enum答案:B10. iOS 中的 Auto Layout 约束中,哪个属性用于设置约束的优先级?A. constantB. identifierC. priorityD. relation答案:C二、多项选择题(每题 2 分,共 10 题)1. 在 Swift 中,以下哪些是基本数据类型?A. IntB. StringC. ArrayD. Dictionary答案:A, B2. 在 iOS 开发中,以下哪些是视图控制器的生命周期方法?A. viewDidLoadB. viewWillAppearC. viewDidAppearD. didReceiveMemoryWarning答案:A, B, C, D3. Swift 中的高级数据结构包括哪些?A. ArrayB. DictionaryC. SetD. String答案:A, B, C4. 在 iOS 中,以下哪些是内存管理的关键字?A. weakB. unownedC. strongD. autorelease答案:A, B, C5. 下列哪些是 iOS 中的布局框架?A. Auto LayoutB. UIKitC. SwiftUID. Core Animation答案:A, C6. Swift 中的错误处理关键字包括哪些?A. throwB. tryC. catchD. finally答案:A, B, C7. 在 iOS 开发中,以下哪些是 UIKit 框架提供的视图?A. UILabelB. UITableViewC. UICollectionViewD. UIPickerView答案:A, B, C, D8. Swift 中的控制流语句包括哪些?A. ifB. forC. whileD. switch答案:A, B, C, D9. 在 iOS 中,以下哪些是数据持久化的方式?A. UserDefaultsB. Core DataC. File SystemD. SQLite答案:A, B, C, D10. Swift 中的类型转换包括哪些?A. asB. isC. as? (optional)D. as! (force-unwrapping)答案:A, B, C, D三、判断题(每题 2 分,共 10 题)1. Swift 中的闭包是引用类型。
第1篇一、产品设计与创新类1. 如果桌上放置了一部旧iPhone,你能看到哪些材料?(考察应聘者对产品的洞察力和创新能力)2. 请设计一款可以解决全球饥饿问题的产品。
(考察应聘者的大局观和创新思维)3. 请用不超过10个字概括苹果公司的核心价值观。
(考察应聘者的提炼能力和对企业的理解)二、逻辑思维与问题解决类1. 如果准备了4杯水,却来了5位领导,应该如何分配?(考察应聘者的应变能力和团队协作精神)2. 帝国大厦有多重?(考察应聘者的观察力和逻辑推理能力)3. 每天有多少孩子出生?(考察应聘者的观察力和数据处理能力)三、个人价值观与职业规划类1. 你会是什么超级英雄?为什么?(考察应聘者的个性和价值观)2. 请描述你职业生涯中最难忘的一次失败经历,以及你从中学到了什么。
(考察应聘者的挫折承受能力和自我反省能力)3. 你认为自己的优势和劣势分别是什么?(考察应聘者的自我认知能力)四、沟通与团队协作类1. 如果你在团队中遇到了一个难以沟通的同事,你会如何处理?(考察应聘者的沟通能力和团队协作精神)2. 请设计一场针对苹果公司产品的发布会,包括演讲稿、PPT和现场互动环节。
(考察应聘者的策划能力和沟通能力)3. 你认为团队中最重要的是什么?(考察应聘者的团队观念和价值观)五、心理素质与抗压能力类1. 如果你在工作中遇到了一个难以解决的问题,你会如何应对?(考察应聘者的心理素质和抗压能力)2. 请描述一次你在压力下完成任务的经历,以及你如何应对压力。
(考察应聘者的心理素质和抗压能力)3. 你认为自己在面对挫折时,最需要的是什么?(考察应聘者的心理素质和抗压能力)六、社会热点与价值观类1. 如果你是苹果公司的CEO,你会如何应对当前全球贸易战?(考察应聘者的政治敏感度和全局观)2. 请谈谈你对人工智能发展的看法,以及你认为苹果公司应该如何应对?(考察应聘者的价值观和前瞻性)3. 你认为苹果公司应该如何在环保方面做出贡献?(考察应聘者的社会责任感和价值观)总之,苹果公司的奇葩面试题目不仅考验应聘者的专业知识,更考验其创新能力、应变能力和综合素质。
史上最全的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面试题1.在一个对象的方法里面:=“object”;和name=”object”有什么不同吗?答:=”object”:会调用对象的setName()方法;name=“object”:会直接把object赋值给当前对象的name属性。
2.请简述=nil的机制,以及与[namerelease]的区别?=nil;//使用nil参数调用setName:方法[name release]生成的访问器将自动释放以前的name对象3.请简要说明viewDidLoad和viewDidUnload何时调用答viewDidLoad在view从nib文件初始化时调用,loadView在controller 的view为nil时调用。
此方法在编程实现view时调用,view控制器默认会注册memory warning notification,当view controller的任何view没有用的时候,viewDidUnload会被调用,在这里实现将retain的view release,如果是retain的IBOutlet view属性则不要在这里release,IBOutlet会负责release。
4.打印结果main(){int a[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf(“%d,%d”,*(a+1),*(ptr-1));}答:*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int*ptr=(int*)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。
a是长度为5的int数组指针,所以要加5*sizeof(int)所以ptr实际是a[5]但是prt与(&a+1)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*)a,&a的地址是一样的,但意思不一样a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].5.简述内存分区情况提示:分为代码区、数据区、堆区、栈区(1)代码区:存放函数二进制代码(2)数据区:系统运行时申请内存并初始化,系统退出时由系统释放。
第1篇苹果公司,作为全球最具创新精神和影响力的科技公司之一,其面试过程也因其独特性和挑战性而闻名。
以下是一些苹果公司在面试过程中可能出现的奇葩题目,以及对应的答案解析,供求职者参考。
一、苹果奇葩面试题目1. 你面前有两扇门,其中一扇门内藏着宝藏,但如果你不小心闯入另一扇门,只能痛苦地慢慢死掉。
这两扇门后面有两个人,这两个人都知道哪扇门后有宝藏,哪扇门擅闯者死,而这两个人呢,一个人只说真话,一个人只说假话。
谁说真话谁说假话?那就要看你有没有智慧自己找出来了,游戏规则是,你只能问这两个人每人一个问题。
那么,你问什么问题?问哪个人?根据他们的回答,你又该怎么做?答案解析:随便问其中一个人:“如果我问另一个人,他会跟我说哪扇门后是宝藏?”- 如果你问的恰好是讲真话的那个人,那他指给你的答案就是那扇通向死亡的门,因为他会诚实地告诉你那个说谎的人会怎么说。
- 如果你问的是那个只说谎话的,你得到的也是错误的答案,因为另一个人是讲真话的,说谎话的人会告诉你与讲真话的人相反的答案。
- 所以你只要随便问一个人上述问题,然后选择与他们说的相反的门就行了。
2. 帝国大厦有多重?答案解析:这个问题看似简单,实则考验面试者的应变能力和逻辑思维。
正确的答案并不是直接给出帝国大厦的重量,而是通过提问或调查来获取答案。
例如,可以询问建筑工人、查阅相关资料或使用科学方法进行测量。
3. 每天有多少孩子出生?答案解析:这个问题看似模糊,实则考察面试者的分析能力和数据敏感性。
正确的答案不是直接给出一个数字,而是通过查找相关数据、分析历史趋势和预测未来趋势来得出结论。
4. 怎样测试一台烤面包机?答案解析:这个问题旨在考察面试者的创新思维和解决问题的能力。
一个可能的答案是:通过观察面包机在不同温度、时间、面包片厚度和湿度条件下的烤制效果,以及通过感官判断面包的口感和色泽来测试烤面包机。
5. 秋千为什么只有前后荡,没有左右荡?答案解析:这个问题考察面试者的辩证思维和逻辑推理能力。
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)。
史上最全的iOS面试题及答案以下是为大家整理的史上最全的ios面试题及答案的相关范文,本文关键词为史上,最全,ios,试题,答案,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教师教学中查看更多范文。
精品文档.史上最全的ios面试题及答案?1.写一个nsstring类的实现+(id)initwithcstring:(c*****tchar*)nullTerminatedcstringencoding:(nsstringencoding)encoding;+(id)stringwithcstring:(c*****tchar*)nullTerminatedcstringencoding:(nsstringencoding)encoding{nsstring*obj;obj=[selfallocwithZone:nsDefaultmallocZone()];obj=[objinitwithcstring:n ullTerminatedcstringencoding:encoding];returnAuToReLeAse(obj);}2static关键字的作用:(1)函数体内static变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
3线程与进程的区别和联系?精品文档进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
iOS面试题1、IOS中的传值方式有那些?答案:属性传值、单例传值,通知传值、全局变量、代理传值,block传值2. obj-c的优缺点答: objc优点:1) Cateogies (类目)2) Posing (冒充)3) 动态识别4) 指标计算5)弹性讯息传递6) 不是一个过度复杂的 C 衍生语言7) Objective-C 与 C++ 可混合编程objc缺点:1) 不支援命名空間2) 不支持运算符重载3)不支持多重继承4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。
(如内联函数等),性能低劣。
3. readwrite,re ado nly,assign,retain,copy,nonatomic 属性的作用?答:@property是一个属性访问声明,扩号内支持以下几个属性:1,getter=getterName,setter=setterName,设置setter与 getter的方法名2,readwrite,re ado nly,设置可供访问级别2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再 Copy出新的对象,retainCount为1。
这是为了减少对上下文的依赖而引入的机制。
4.获取应用程序程序包中资源文件路径的方法:例如获取程序包中一个图片资源(apple.png)路径的方法:答: NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];UIImage *appleImage = [[UIImage alloc]initWithContentsOfFile:imagePath];代码中的mainBundle类方法用于返回一个代表应用程序包的对象。
史上最全的iOS面试题及答案史上最全的iOS面试题及答案iOS面试小贴士———————————————回答好下面的足够了-------------------------------------多线程、特别是NSOperation 和GCD 的内部原理。
运行时机制的原理和运用场景。
SDWebImage的原理。
实现机制。
如何解决TableView卡的问题。
block和代理的,通知的区别。
block的用法需要注意些什么。
strong,weak,retain,assign,copy nomatic 等的区别。
设计模式,mvc,单利,工厂,代理等的应用场景。
单利的写法。
在单利中创建数组应该注意些什么。
NSString 的时候用copy和strong的区别。
响应值链。
NSTimer 在子线程中应该手动创建NSRunLoop ,否则不能循环执行。
UIScrollView和NSTimer组合做循环广告图轮播的时候有一个属性可以控制当上下滚动tableview的时候广告轮播图依然正常滚动。
Xcode最新的自动布局。
这个很多公司都用。
尽量自学下。
git ,和svn的用法。
git的几个命令简单的记下。
友盟报错可以查到具体某一行的错误,原理是什么。
Instrument 可以检测电池的耗电量、和内存的消耗。
的用法。
动画CABaseAnimation CAKeyAni…. CATrans….. CAGoup…. 等熟悉。
ARC的原理。
自己写过什么自定义控件就最好了。
———————————————回答好上面的足够了------------------------------------- __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
百度 ios面试题百度iOS面试题在iOS开发领域中,百度一直以来都是一家颇具实力和创新能力的公司。
为了能够顺利通过百度的iOS面试,我们需要对百度常见的iOS 面试题进行深入了解和准备。
本文将针对百度iOS面试题展开讨论并给出相应的答案,以帮助读者在准备面试时有所依据。
1. 什么是iOS中的Autorelease Pool?它的主要作用是什么?在iOS中,Autorelease Pool(自动释放池)是一种内存管理机制,用于管理autorelease对象,即需要延迟释放内存的对象。
其主要作用是延迟内存释放,提高内存利用率和性能。
当autorelease对象被添加到Autorelease Pool中时,系统会在合适的时机(通常是在当前的runloop结束时)自动释放这些对象。
2. 请描述下iOS中的内存管理机制。
在iOS中,内存管理主要依靠引用计数来完成。
当一个对象被引用时,其引用计数会加1,当引用计数为0时,对象将会被释放。
通过retain、release和autorelease等方法可以控制对象的引用计数。
iOS中引入了ARC(自动引用计数)机制,可以自动管理对象的引用计数,从而减少手动引用计数的工作。
3. 在iOS中,什么是代理模式?请举一个例子并说明其使用场景。
代理模式是一种常用的设计模式,在iOS开发中被广泛使用。
在代理模式中,一个类可以将某些任务委托给另一个类来完成,从而实现代码的分离和解耦。
一个常见的例子是UITableView的代理模式。
UITableView的DataSource和Delegate就是典型的代理模式的应用。
UITableView的DataSource负责提供数据源,Delegate负责处理用户交互等事件。
通过代理模式,我们可以将UITableView的数据源和事件处理逻辑抽离出来,更好地实现了业务逻辑的分离和复用。
4. 在iOS开发中,什么是MVC模式?请描述一下各个组成部分的作用。
ios考试题目及答案1. 以下哪个选项是iOS开发中用于创建用户界面的框架?A. SwiftB. UIKitC. Objective-CD. CoreData答案:B. UIKit2. 在iOS中,哪个类是用来处理触摸事件的?A. UIResponderB. UIViewC. UIWindowD. UINavigationController答案:A. UIResponder3. iOS应用程序的主线程是什么?A. 后台线程B. 主线程C. 网络线程D. UI线程答案:B. 主线程4. 下面哪个是iOS开发中用于数据持久化的框架?A. UIKitB. Core DataC. Core AnimationD. Core Bluetooth答案:B. Core Data5. 在iOS开发中,哪个框架提供了网络请求的功能?A. FoundationB. UIKitC. Core DataD. Core Location答案:A. Foundation6. iOS中的Auto Layout是如何工作的?A. 通过代码手动计算布局B. 通过约束自动计算布局C. 通过XML文件定义布局D. 通过数据库定义布局答案:B. 通过约束自动计算布局7. 在iOS开发中,哪个生命周期方法会在视图控制器的视图完全消失后被调用?A. viewDidLoadB. viewWillAppearC. viewDidAppearD. viewWillDisappear答案:D. viewWillDisappear8. iOS开发中,哪个属性用于控制视图的可见性?A. hiddenB. alphaC. frameD. backgroundColor答案:A. hidden9. 在iOS中,哪个方法用于在视图控制器中添加子视图控制器?A. addChildViewControllerB. addSubViewC. addSubviewD. addViewController答案:A. addChildViewController10. iOS开发中,哪个类用于处理应用的生命周期事件?A. UIApplicationB. AppDelegateC. UIWindowD. UIViewController答案:B. AppDelegate。
面试题1.Object-c的类可以多继承么?category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Object-c的类不可以多重继承,可以用伪继承和@protocol委托来代替;可以实现多个接口,通过实现多个接口就可以完成C++的多重继承,Category 是类别,一般用分类比较好,用Category去重写类的方法,仅对本Category 有效,不会影响到其他类与原有类的关系。
伪继承必须覆盖两个方法,即methodSignatureForSelector: 和forwardInvocation:。
methodSignatureForSelector:的作用在于为另一个类实现的消息创建一个有效的方法签名。
forwardInvocation:将选择器转发给一个真正实现了该消息的对象.2.类别的作用?继承和类别在实现中有何区别?答:category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
/* 非正式协议:是使用类别category来实现,非正式协议是NSObject的一个类别,这样任何类的对象都可以作为委托对象来使用,它可以列出对象能够执行的所有方法,这样用来实现委托,我们可以使用选择器来判断该非正式协议中是否有这个方法。
正式协议:是一个命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议,采用协议的方法是在类的@interface声明中列出协议的名称,此时,实现协议的类应该遵守协议,承诺实现协议中的所有方法。
*/3.类别和类扩展的区别?答:1."类别"比"子类"方便多了,因为对已添加category的类,使用到它或者它的子类的地方,category都会起作用;“子类”的话,则需要在使用的每个地方,创建子类对象2."类别"只能添加方法,不能加属性、变量3."类别"一般是对框架提供类的扩展(没有源码,不能修改)4."类别"一般是在不想生成一个新的子类的情况下,比如对NSArray的扩展“扩展”则相当于定义一个子类,在里面添加属性和方法4.属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?什么情况使用weak关键字,相比assign有什么不同?答:1> readwrite:同时生成get方法和set方法的声明和实现2> readonly:只生成get方法的声明和实现3> assign:set方法的实现是直接赋值,用于基本数据类型4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型5> copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)注意点:(nonatomic)非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。
IOS Software Development1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。
深层复制:复制引用对象本身。
意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy 指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。
深复制就好理解了,内存中存在了两份独立对象本身。
用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。
2.What is advantage of categories? What is difference between implementing a category and inheritance?类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
3.Difference between categories and extensions?类别和类扩展的区别。
答案:category和extensions的不同在于后者可以添加属性。
另外后者添加的方法是必须要实现的。
extensions可以认为是一个私有的Category。
4.Difference between protocol in objective c and interfaces in java?oc中的协议和java中的接口概念有何不同?答案:OC中的代理有2层含义,官方定义为formal和informal protocol。
iOS 面试题锦集1.Difference between shallow copy and deep copy? 浅复制和深复制的区别? 答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。
深层复制:复制引用对象本身。
意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个存资源,复制的只不过是是一个指针,对象本身资源 还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。
深复制就好理解了,存中存在了 两份独立对象本身。
用网上一哥们通俗的话将就是: 浅复制好比你和你的影子,你完蛋,你的影子也完蛋 深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。
2.What is advantage of categories? What is difference between implementing a category and inheritance? 类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用: (1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
3.Difference between categories and extensions? 类别和类扩展的区别。
答案:category和extensions的不同在于后者可以添加属性。
另外后者添加的方法是必须要实现的。
extensions可以认为是一个私有的Category。
4.Difference between protocol in objective c and interfaces in java? obc中的协议和java中的接口概念有何不同? 答案:OBC中的代理有2层含义,官方定义为 formal和informal protocol。
iOS面试题(附答案)1、简述一下UIViewController的生命周期?alloc -‐> i nit -‐> l oadView -‐>viewDidLoad -‐> v iewWillAppear -‐>viewDidAppear -‐>viewWillDisappear -‐>viewDidDisappear -‐>viewUnLoad -‐>dealloc2、#import和#include的区别?#import导入的头文件不会多次重复导入3、写一个计算A、B中较大值的标准宏MAX?#define MAX(A,B) ( (A)>(B) ? (A) : (B) )4、谈一下iOS中的多线程?多线程是指从软件或硬件上实现多个线程并发执行的技术iOS中可以使用NSThread、NSOperation、GCD实现多线程5、谈一下Objective-‐C的内存管理方式?ARC、手动管理、线程池6、简述assign、retain、copy、weak和strong分别在什么情况下使用?答案见《iOS面试知识点整理.pdf》7、类别的作用?说一下类别和类扩展的区别?类别的作用是给类增加方法类扩展可以给类增加属性或私有变量,只可以对自定义的类使用类扩展8、说说你对KVC和KVO的理解?KVC:键值编码,提供一种机制来间接访问对象的属性KVO:键值观察,基于KVC实现的对类属性的观察监听9、深复制和浅复制的区别?答案见《iOS面试知识点整理.pdf》10、谈一下你对block的理解,请写一个block类型的属性?block本质是匿名函数声明一个block:方法一:void (^block)( N SString *string);方法二:typedef v oid(^MyBlock)(NSString *string);@property (nonatomic, s trong)MyBlock b lock;11、frame和bounds的区别?答案见《iOS面试知识点整理.pdf》12、谈一下UITableViewCell的重用机制?13、简述一下消息推送的流程?1、在苹果推送服务器APNs上注册deviceToken,并发送给自己的后台服务器;2、后台服务器将deviceToken和要发送的消息打包发送给APNs(注意:这一步还需要推送证书的路径和密码)3、A PNs将消息发送给deviceToken中保存的指定设备中的指定App14、简述一下App发布到AppStore的流程?1、首先生成发布描述文件(通过创建生产证书 -‐> 创建AppId (Bundle I d)-‐> 创建发布的描述文件)2、然后在iTunesContent中创建一个应用并填好信息3、在XCode中将项目打包并上传(注意:Bundle I d全程一致, 在build S etting中填好刚创建的描述文件)4、最后再回到iTunesContent中选择刚才上传的项目,然后点击提交。
iOS 面试题及答案1、自动释放池是什么,如何工作的?当您向一个对象发送一个autorelease消息时,cocoa就会将该对象的一个引用放入到最新的自动释放池。
它仍然是个正当的对象,因此自动释放池定义的作用域内的其他对象可以向它发送消息。
当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就会被释放。
2、线程和进程的区别和联系?进程和线程都是由操作系统所体会的程序运行的基本单元,系统会利用该基本单元实现系统对应用的并发性。
线程和进程的主要差别在于它们是不同的操作系统资源管理方式,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所有多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
3、属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?1)Readwrite是可读可写特性,需要生成getter方法和setter方法时2)Readonly是只读写特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变3)Assign是赋值特性,setter方法将传入参数赋值给实例变量,仅设置变量时4)Retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+15)Copy表示赋值特性,setter方法将传入对象赋值一份,需要完全一份新的变量时6)Nonatomic非原子操作,决定编译器生成的setter,getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic4、object-c中创建线程的方法是什么,如果在主线程中执行代码,方法是什么,如果想延时执行代码,方法又是什么?线程创建有三种方法:使用nsthread创建、使用gcd的dispatch创建、使用子类化的nsoperation创建,然后将其加入nsoperationqueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone5、类别的作用,继承和类别在实现中有何区别?Category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改;并且如果类别和原来类中的方法产生冲突,类别将覆盖原来的方法,因此类别具有更高的优先级;将类的实现分散到多个不同文件或多个不同框架中,创建对私有方法的前向引用,向对象添加非正式协议。
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。
2. #import 跟#include 有什么区别,@class呢?#import<> 跟#import””又什么区别?答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import“”用来包含用户自定义文件头文件。
6.常见的object-c的数据类型有哪些,和C的基本数据类型有什么区别?如:NSInteger 和intobject-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData 等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。
NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。
8.Objective-C如何对内存管理的,说说你的看法和解决方法?Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
1. (Garbage Collection)自动内存计数:这种方式和java类似,在你的程序的执行过程中。
始终有一个高人在背后准确地帮你收拾垃圾,你不用考虑它什么时候开始工作,怎样工作。
你只需要明白,我申请了一段内存空间,当我不再使用从而这段内存成为垃圾的时候,我就彻底的把它忘记掉,反正那个高人会帮我收拾垃圾。
遗憾的是,那个高人需要消耗一定的资源,在携带设备里面,资源是紧俏商品所以iPhone不支持这个功能。
所以“Garbage Collection”不是本入门指南的范围,对“Garbage Collection”内部机制感兴趣的同学可以参考一些其他的资料,不过说老实话“Garbage Collection”不大适合适初学者研究。
解决: 通过alloc –initial方式创建的, 创建后引用计数+1, 此后每retain一次引用计数+1, 那么在程序中做相应次数的release就好了.2. (Reference Counted)手动内存计数:就是说,从一段内存被申请之后,就存在一个变量用于保存这段内存被使用的次数,我们暂时把它称为计数器,当计数器变为0的时候,那么就是释放这段内存的时候。
比如说,当在程序A里面一段内存被成功申请完成之后,那么这个计数器就从0变成1(我们把这个过程叫做alloc),然后程序B也需要使用这个内存,那么计数器就从1变成了2(我们把这个过程叫做retain)。
紧接着程序A不再需要这段内存了,那么程序A 就把这个计数器减1(我们把这个过程叫做release);程序B也不再需要这段内存的时候,那么也把计数器减1(这个过程还是release)。
当系统(也就是Foundation)发现这个计数器变成了0,那么就会调用内存回收程序把这段内存回收(我们把这个过程叫做dealloc)。
顺便提一句,如果没有Foundation,那么维护计数器,释放内存等等工作需要你手工来完成。
解决:一般是由类的静态方法创建的, 函数名中不会出现alloc或init字样, 如[NSString string]和[NSArray arrayWithObject:], 创建后引用计数+0, 在函数出栈后释放, 即相当于一个栈上的局部变量. 当然也可以通过retain延长对象的生存期。
3. (NSAutoRealeasePool)内存池:可以通过创建和释放内存池控制内存申请和回收的时机。
解决:是由autorelease加入系统内存池, 内存池是可以嵌套的, 每个内存池都需要有一个创建释放对, 就像main函数中写的一样. 使用也很简单, 比如[[[NSStringalloc]initialWithFormat”Hey you!”] autorelease], 即将一个NSString对象加入到最内层的系统内存池, 当我们释放这个内存池时, 其中的对象都会被释放.9. 原子(atomic)跟非原子(non-atomic)属性有什么区别?1. atomic提供多线程安全。
是防止在写未完成的时候被另外一个线程读取,造成数据错误。
2. non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic ,那么访问器只是简单地返回这个值。
11. 内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?谁申请,谁释放遵循Cocoa Touch的使用原则;内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property 设置特性时,一定要用对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,要细心。
关键字alloc 或new 生成的对象需要手动释放;设置正确的property属性,对于retain需要在合适的地方释放,12.如何对iOS设备进行性能测试?Profile-> Instruments ->Time Profiler13. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelectornThread:withObject:waitUntilDone:14.描述一下iOS SDK中如何实现MVC的开发模式MVC是模型、试图、控制开发模式,对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。
所有的用户数据都是模型层,它应该独立于视图。
所有的ViewController都是控制层,由它负责控制视图,访问模型数据。
16. 类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
18. oc中的协议和java中的接口概念有何不同?答案:OC中的代理有2层含义,官方定义为formal和informal protocol。
前者和Java 接口一样。
informal protocol中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。
其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。
这个意思是,这些是可选的。
比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。
然后你在后期可以直接使用这些更好的方法。
这么看,总觉得类别这玩意儿有点像协议的可选协议。
”现在来看,其实protocal已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用interface修饰“,现在我们看到协议中两个修饰词:“必须实现(@requied)”和“可选实现(@optional)”。
19. 什么是KVO和KVC?答案:kvc:键–值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。
很多情况下可以简化程序代码。
apple文档其实给了一个很好的例子。
kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。
具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。
比如我自定义的一个button[self addObserver:self forKeyPath”highlighted”options:0 context:nil];#pragma mark KVO- (void)observeValueForKeyPathNSString )keyPath ofObjectid)object changeNSDictionary )change contextvoid *)context{if ([keyPath isEqualToString”highlighted”] ) {[self setNeedsDisplay];}}对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。
对于kvc机制如何通过key寻找到value:“当通过KVC调用对象时,比如:[self valueForKey”someKey”]时,程序会自动试图通过几种不同的方式解析这个调用。
首先查找对象是否带有someKey 这个方法,如果没找到,会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试图调用-(id) valueForUndefinedKey:这个方法。
如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException异常错误。
(注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法,前面加一个get,或者_someKey以及_getsomeKey 这几种形式。