全部的内容大部分来自于网络的搜集,因此我不是一个创造者,而是一个搬运工。我尽可能把题目,尤为是参考答案的出处列明。如有任何疑问,建议,意见,请联系我。html
第一部分面试题来源于iOS-Developer-Interview-Questions,用[◇]标示,难度是根据我本身的水平来标识的。ios
其中大部分答案来源于没阳光的午后的三篇git
你能用到的iOS面试题(二)github
没阳光的午后还写了其余不少有质量的iOS开发文章,你们能够去学习。算法
第二部分面试题来源于微博@我就叫Sunny怎么了的这篇博文:《招聘一个靠谱的 iOS》,其中共55题,除第一题为纠错题外,其余54道均为简答题。用[※]标示,难度是微博@我就叫Sunny怎么了标识的。编程
答案为微博@iOS程序犭袁整理,未经出题者校对,若有纰漏,请向微博@iOS程序犭袁指正。swift
第三部分面试题来源于iOS程序员面试,绝对会遇到这些问题!,和第一部分有一半的重叠,由于这两部分都是从iOS-Developer-and-Designer-Interview-Questions衍生过来的。用[◆]标示,难度是根据我本身的水平来标识的。设计模式
绝大部分是我本身给出的参考意见(或者参考连接),你们有问题能够联系我,欢迎批评指正。
其余一部分从一些同窗的整理中搬运过来,有些是重叠的,或者相似的问题,我可能就整合了。这些来自
pingui的iOS面试题,持续更新...等等,用[○]标示,难度是根据我本身的水平来标识的。
还有一部分是我本身补充的问题,用[●]标示,难度是根据我本身的水平来标识的。
Swift的内容来自这里【面试必备】Swift 面试题及其答案, 由于我对swift不熟悉,因此仅摘录了一部分面试题目。也没有标识难度。今年会开始swift的学习,到时候再补充吧。
今天有发现一位大拿的博客,比我整理的还全面,你们能够参考:
还有须要说明的是,带[自]标记的目前暂时没有参考答案,因此连接里面的内容是空的,你们能够没必要点击进去。
编码规范
问题[※]: 请Review下面的代码,并根据iOS的编码规范作出正确的修改
版本控制
问题[◇◇]:请问您用过什么版本控制工具?并简述其工做流程。
问题[◇◇◇]:有没有在 GitHub 上发布过开源代码,参与过开源项目?
开发工具
Xcode
Instruments
问题[◇◇◇◇]:你通常是怎么用 Instruments 的?
问题[○○○○○]:讲讲你用Instrument优化动画性能的经历吧(若是有的话)
Xcode插件
问题[◆◆◆][自]:谈一谈你经常使用的开发工具都有哪些优点?
运行调试
问题[○○○]:谈谈iOS开发中Debug和Release的区别和使用
问题[●●●]:您是怎么调试iOS程序的(谈谈您的iOS调试经验?)
问题[◇◇◇]:若是一个函数10次中有7次正确,3次错误,问题可能出如今哪里?
问题[◆◆◆]:若是在Cocoa中发现一个Bug,你会如何处理?
问题[◆◆◆]:若是应用的新版本出现了Regression的状况,该如何补救?如何防止用户在使用过程当中遇到新的Bug?
CocoaPods
问题[◇◇]:熟悉 CocoaPods 么?能大概讲一下工做原理么?
关于App Store
问题[◆◆◆]:应用内购买(In-App Purchases)是怎么回事?IAP可以为用户带来哪些新体验?
问题[◆◆]:你是否在App Store上发布过应用?可否归纳一下过程?
问题[◆◆]:Provisioning Profiles是指?
问题[◆◆◆]:经过Ad-hoc发布应用的话,该如何使用UUID?
Objective-C
基础语法
关键字
问题[○○○]:请用预处理指令#define声明一个常数,用以代表1年中有多少秒(忽略闰年问题)
问题[○○○]:写一个”标准"宏MIN ,这个宏输入两个参数并返回较小的一个。
问题[○○]:请谈谈#include与#import的区别、#import与@class 的区别
问题[○○]:请分别说明@public、@protected、@private 它们的含义与做用
问题[○○○]:谈谈您对@synthesize、@dynamic的理解
问题[○○○]:请解释self = [super init]方法
问题[○○]:请问常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int
问题[◆◆◆◆]:请说明如何使用Instancetype及其重要性。
属性访问
问题[※※※]:ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?
问题[○○○]:@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的
问题[○○]:什么状况使用 weak 关键字,相比 assign 有什么不一样?
问题[○○○○]:@protocol 和 category 中如何使用 @property
问题[※※※]:用@property声明的NSString(或NSArray,NSDictionary)常用copy关键字,为何?若是改用strong关键字,可能形成什么问题?
问题[○○○]:这个写法会出什么问题: @property (copy) NSMutableArray *array;
问题[※※]:@synthesize和@dynamic分别有什么做用?
问题[※※※]:@synthesize合成实例变量的规则是什么?假如property名为foo,存在一个名为_foo的实例变量,那么还会自动合成新变量么?
问题[※※※※※]:在有了自动合成属性实例变量以后,@synthesize还有哪些使用场景?
问题[◇]:如何为 Class 定义一个对外只读对内可读写的属性?
问题[○○○]:在一个对象的方法里面:self.name = @"object";和name =@"object";有什么不一样吗?
问题[○○○]:为何不少内置类如UITableViewController的delegate属性都是assign而不是retain的?
问题[○○○]:请解释一下关键词的区别:assign vs weak, __block vs __weak
Block
问题[○○○]:使用block有什么好处?使用NSTimer写出一个使用block显示(在UILabel上)秒表的代码
问题[※※]:使用block时什么状况会发生引用循环,如何解决?
问题[※※※]:使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?
Category
问题[○○○]:重写一个类的方式用继承好仍是分类好? 为何?
问题[◇◇]:iOS Extension 是什么?能列举几个经常使用的 Extension 么?
KVC/KVO
问题[※※]:addObserver:forKeyPath:options:context:各个参数的做用分别是什么,observer中须要实现哪一个方法才能得到KVO回调?
问题[※※※]:若一个类有实例变量NSString *_foo,调用setValue:forKey:时,能够以foo仍是_foo做为key?
问题[※※※※]:KVC的keyPath中的集合运算符如何使用?
问题[※※※※]:KVC和KVO的keyPath必定是属性么?
问题[※※※※※]:如何关闭默认的KVO的默认实现,并进入自定义的KVO实现?
问题[※※※※※]:apple用什么方式实现对一个对象的KVO?
Protocal/Delegate
问题[◇◇]:什么是 Protocol,Delegate 通常是怎么用的?
Notification
问题[◇◇◇]:谈谈NSNotification 和 KVO 的使用场景?
问题[◇◇◇◇◇]:为何 NotificationCenter 要 removeObserver? 如何实现自动 remove?
面向对象
问题[※※]:objc中向一个nil对象发送消息将会发生什么?
问题[※※※]:objc中向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?
问题[○○○]:为何其余语言里叫函数调用,Object-C里则叫给我对象发消息
问题[○○○○]:对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?
问题[○○○]:isMemberOfClass 和 isKindOfClass 联系与区别
问题[※※※]:何时会报unrecognized selector的异常?
问题[※※※※]:一个objc对象的isa的指针指向什么?有什么做用?
问题[※※※※※]:objc中的类方法和实例方法有什么本质区别和联系?
问题[※※※※※]:_objc_msgForward函数是作什么的,直接调用它将会发生什么?
问题[※※※※※]:可否向编译后获得的类中增长实例变量?可否向运行时建立的类中添加实例变量?为何?
问题[◇◇◇◇◇]:Objective-C 中,meta-class 指的是什么?
问题[◇◇◇]:Toll-Free Bridging 是什么?什么状况下会使用?
内存管理
问题[○○○]:什么是ARC(ARC是为了解决什么问题诞生的)?
问题[※※※※]:一个objc对象如何进行内存布局?(考虑有父类的状况)
问题[※※※※]:不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(好比在一个vc的viewDidLoad中建立)
问题[※※※※※]:苹果是如何实现autoreleasepool的?
问题[○○○]:描述一个你所遇到retain cycle例子
多线程
问题[◇◇◇◇]:何时选择NSOperation? NSOperation 相比于 GCD 有哪些优点?
问题[○○○]:Object C中建立线程的方法是什么?若是在主线程中执行代码,方法是什么?若是想延时执行代码、方法又是什么?
问题[○○○]:有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?若是须要a、b、c、d顺序执行,该如何实现?
问题[※※]:GCD的队列(dispatch_queue_t)分哪两种类型?
问题[※※※※]:如何用GCD同步若干个异步调用?(如根据若干个url异步加载多张图片,而后在都下载完成后合成一张整图)
问题[※※※※]:dispatch_barrier_async的做用是什么?
问题[※※※※※]:苹果为何要废弃dispatch_get_current_queue?
Runloop
问题[○○○○]:UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程当中,label是否刷新,为何?
问题[※※※※]:以+ scheduledTimerWithTimeInterval...的方式触发的timer,在滑动页面上的列表时,timer会暂定回调,为何?如何解决?
问题[◇◇◇◇]:为何 UIScrollView 的滚动会致使 NSTimer 失效?
Runtime
问题[※※※※]:runtime如何经过selector找到对应的IMP地址?(分别考虑类方法和实例方法)
问题[※※※※]:使用runtime Associate 方法关联的对象,须要在主对象dealloc的时候释放么?
问题[※※※※※]:runtime如何实现weak变量的自动置nil?
问题[○○○○○]:什么是method swizzling?
问题[◇◇◇◇◇]:+(void)load; +(void)initialize;有什么用处?
问题[◇◇◇◇◇]:Objective-C 如何对已有的方法,添加本身的功能代码以实现相似记录日志这样的功能?
swift
问题:对一个optional变量拆包有多少种方法?并在安全方面进行评价。
问题:泛型类,泛型结构体,泛型协议的功能特性都包含在Swift中吗?
问题:描述一种在Swift中出现循环引用的状况,并说明怎么解决。
iOS
Cocoa Touch Layer
High Level Features
问题[◆◆◆]:Cocoa Touch Layer 包含什么?不包含什么?
问题[●●●]:什么是UI State Preservation?
问题[●●●]:什么是Apple Push Notification Service?
问题[●●●]:什么是Local Notifications?
问题[●●●]:什么是Gesture Recognizers?
问题[●●●]:什么是Standard System View Controllers?
问题[◆◆◆]:请解释一下Handoff是什么,并简述它是如何实现iOS、Mac/网页应用互通的。
问题[◆◆◆]:iOS应用是如何实现后台多任务处理(Multitasking)的?
问题[◇◇◇]:iOS 7的多任务添加了哪两个新的 API? 各自的使用场景是什么?
问题[◆◆◆]:Game Center针对iOS游戏有哪些功能?
Cocoa Touch Frameworks
APP
基础控件
问题[◆◆◆]:请解释一下启动画面(Launch Images)。
问题[◆◆◆]:应该在什么状况下使用标签、文本域和文本视图?
问题[◆◆◆]:选取器视图(Picker View)适合存放哪类内容?
问题[◆◆◆]:Splitview Controller是什么?
问题[◆◆◆][自]:何时用“弹出(Popover)”属性最为合适?
问题[◆◆◆]:表视图(Table View)是什么?集合视图(Collection View)又是什么?
问题[◆◆◆]:选项卡(Tab Bar)和工具栏(Toolbar)分别是什么?二者之间有何共同点和不一样点?
问题[◆◆◆][自]:导航栏(Navigation Bar)是什么?可否拿出你的iPhone,指出你下载的哪些应用运用了导航栏?
问题[◆◆◆]:设备状态栏(Device Status Bar)是什么?高度如何?是否透明?在手机通话或者导航状态下,它是如何显示的?
问题[○○○]:自定义实现UITabbarController的原理
View Controller
问题[◆◆◆]:Controller Life-Cycle以及View Life-cycle分别有哪些调试方法?
问题[○○○]:请谈一谈UIViewController的完整生命周期
问题[○○○]:ViewController 的 loadView,、viewDidLoad,、viewDidUnload 分别是在何时调用的?
问题[○○○]:push view controller 和 present view controller的区别
问题[◇◇◇◇]:哪些途径可让 ViewController 瘦下来?
View
问题[○○○○]:LayoutSubViews在何时被调用?
问题[○○○]:一个view已经初始化完毕,view上面添加了n个button,除用view的tag以外,还能够采用什么办法来找到本身想要的button来修改button的值
问题[◇◇◇◇]:请问UIView和CALayer是什么关系?
问题[◇◇◇◇◇]:+[UIView animateWithDuration :animations: completion:] 内部大概是如何实现的?
Tableview
问题[○○]:UITableView的数据源方法和代理方法?
问题[◇◇◇◇]:当 TableView 的 Cell 改变时,如何让这些改变以动画的形式呈现?
[问题[○○○○]:谈谈UITableViewCell是如何优化表格的?
Event
问题[◆◆◆]:请简要描述一下UIScrollView的执行过程。它是如何响应手势识别(Gesture Recognizer)、多点触控(Multi-Touch)和Run Loop的?
Storybaord
问题[◆◆◆]:请描述一下Storyboard和标准NIB文件的差异。
问题[※※]:IBOutlet连出来的视图属性为何能够被设置成weak?
问题[※※※※※]:IB中User Defined Runtime Attributes如何使用?
问题[◆◆◆]:自动布局(Auto Layout)的做用是什么?请归纳一下它是如何运行的。
通知
问题[◇◇◇]:Push Notification 是如何工做的?
其余
问题[◇◇◇]:iOS 的沙盒目录结构是怎样的? App Bundle 里面都有什么?
问题[○○]:将字符串“2015-04-10”格式化日期转为NSDate类型
问题[◇◇]:使用 NSUserDefaults 时,如何处理布尔的默认值?(好比返回 NO,不知道是真的 NO 仍是没有设置过)
问题[◆◆◆]:请解释一下NSUserDefaults。就你而言,你会如何在磁盘中对数组对象进行序列化?
问题[◇◇◇]:如何把一个包含自定义对象的数组序列化到磁盘?
问题[◇◇◇◇]:performSelector:withObject:afterDelay: 内部大概是怎么实现的,有什么注意事项么?
问题[◆◆◆]:请描述SpriteKit和SceneKit的做用。
问题[◆◆◆]:请归纳一下你在构建iOS应用时的测试过程。iOS应用如何实现对其余语言、日期格式以及货币单位的支持?
问题[◆◆]:为何Cocoa Touch的类名称是以两个大写字母开头的?
问题[◆◆◆]:iOS是如何提升安全性,保护用户隐私信息的?
问题[◆◆◆][自]:iPad 2,iPad mini 1-3,iPad Retina,iPad Air 2,iPhone 五、5S、6以及6+在硬件性能方面有何差别?这对注重性能的应用有何限制?
问题[◆◆◆][自]:传感器,IO以及WiFi、拨号等链接方式如何在iOS平台上运做?它们有何利用价值?请扼要地谈谈你的观点。
问题[◆◆◆]:AirPlay是如何运行的?换作是你,你会如何经过编程提升应用的实用性以及演示效果?
Media Layer
问题[○○○]:Quatrz 2D的绘图功能的三个核心概念是什么并简述其做用。
问题[○○○○]:如何高性能的给 UIImageView 加个圆角?
问题[◇◇◇◇◇]:为何当 Core Animation 完成时,layer 又会恢复到原先的状态?
问题[○○○]:iPhone OS主要提供了几种播放音频的方法?
问题[○○○]:使用AVAudioPlayer类调用哪一个框架、使用步骤?
问题[◆◆◆]:请归纳一下Core Audio,Core Data以及Core Location各是什么。它们对iOS应用有何意义?
Core Services Layer
问题[◆◆◆]:VoiceOver是什么?请举例解释一下iOS中的辅助功能(Accessibility)。开发者如何使用这些功能?
问题[○○○]:用过Core Data 或者 SQLite吗?读写是分线程的吗?遇到过死锁没?如何解决的?
问题[○○]:什么是NSManagedobjectContext?
问题[○○○]:HTTP协议的特色,关于HTTP请求GET和POST的区别
问题[○○○]:XML数据解析方式各有什么不一样,JSON解析有哪些框架?
问题[○○○]:Core Foundation中提供了哪几种操做Socket的方法?
Core OS Layer
问题[○○○]:如何制做一个静态库/动态库,他们的区别是什么?
问题[◇◇◇]:你会如何存储用户的一些敏感信息,如登陆的 token。
问题[◇◇◇]:Apple Pay 是什么?它的大概工做流程是怎样的?
数据结构与算法
架构
问题[◆◆◆]:MVC对代码库(Codebase)的设计有何影响?
问题[◆◆◆]:应用能够下载并即刻显示数据。如何根据MVC来判断下载的最佳位置?
设计模式
问题[○○○]:单例模式的做用?程序中有哪些常见的单例?单例的实现步骤?
问题[◇◇◇◇]:若是让你来实现dispatch_once,你会怎么作?
问题[◆◆◆]:iOS使用的是哪些设计模式(Design Patterns)?你的代码库使用的是哪些设计模式?
问题[●●●●]:UIScrollVew用到了什么设计模式?还能再foundation库中找到相似的吗?
问题[●●●]:简要描述观察者模式,并运用此模式编写一段代码?
问题[●●●]:使用工厂模式最主要的好处是什么?你在哪里使用?
第三方组件
问题[○○○○○]:ASIHttpRequest 或者 SDWebImage 里面给 UIImageView 加载图片的逻辑是什么样的?
问题[◇◇◇]:有用过一些开源组件吧,能简单说几个么,大概说说它们的使用场景实现。
加密解密
问题[○○○○]:MD5和Base64的区别是什么,各自场景是什么?
UI设计
问题[◆◆◆]:iPhone五、六、6+以及iPad Air 2的屏幕分辨率分别是多少?
问题[◆◆◆][自]:设计iPhone和iPad应用时,应分别考虑哪些因素?
问题[◆◆◆][自]:请描述一下软件设计中的交互和Feedback有什么做用。
问题[◆◆◆][自]:请描述一下原型设计对于软件开发的意义。其做用是什么?
问题[◆◆◆]:iOS应用图标是指什么?请尽量详细地描述一下。
问题[◆◆◆]:最小尺寸和最大尺寸的应用图标分别是什么样子的?
问题[◆◆◆]:Newsstand的图标与常规应用有何不一样?
综合题
问题[◇◇◇◇]:设计一个能够无限滚动而且支持自动滚动的 SlideShow
问题[◇◇◇◇]:设计一套大文件(如上百M的视频)下载方案。
问题[◇◇◇◇]:设计一个相似 iOS 主屏能够下拉出现 Spotlight 的系统。
其余
问题[◇◇◇]:今年你最想掌握的一门技术是什么?为何?目前已经作到了哪一个程度?
问题[◆◆◆][自]:你最爱以哪一种方式来检验一项新技术是否好用?
问题[◆◆◆][自]:你以为Xcode有哪些须要改进的地方?
问题[◆◆◆][自]:最近有没有开发什么好玩的东西?你最引觉得豪的做品是什么?
问题[◆◆◆][自]:你最敬佩的独立Mac或者iOS应用开发者是谁?
问题[◆◆◆][自]:请归纳一下你对软件受权的理解,及其对软件开发的影响。
问题[◆◆◆][自]:你认为iOS须要添加或改进哪些API?