iOS面试题总结

1.app分发方式

    所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用。  

   a:个人或者公司的开发者账号 可以上传appStore,用户通过appStore下载。

   b:企业账号:打包分发。

   c:打包到本地: product->archive /window->organizer --->import -->save for ad hoc.有一段时间由于xcode版本问题,项目不能真机运行,就是通过打包到本地,再安装到手机上进行测试的。 需要先下载证书。

   d:通过第三方: 比如蒲公英。公司组织测试的时候,就是将项目导包上传,然后通过扫码或者链接下载。前提也是先需要下载证书。 

2.UIWebView +H5 

    面试官问的是UIWebView  加载H5页面需要做哪些优化。其实这个问题需要具体问题具体分析,主要是看你页面怎么排版以及H5页面的内容,有些问题因为H5中自己处理了,就不再需要手动处理了。

    具体详见:http://www.cnblogs.com/devyh/p/5392577.html

    scalesPgeToFit=yes ;//页面自适应

3.SDWebImage 

 (1)SDWebImage 缓存机制:关于这个问题既不是问原理也不是问如何进行缓存,所以我也不太明白要回答些啥。

 (2)使用SDWebImage 下载图片需要导入那个头文件:#import "SDWebImageManager.h"    

[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"anurl"] options:0
                                                               progress:^(NSInteger receivedSize, NSInteger expectedSize)
                 {
                     //处理下载进度 
                 } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                     completedCount ++ ;
                     if (error) {
                         DDLogDebug(@"error is %@",error);
                     }
                     if (image) {
                        //图片下载完成                      }
                    }
                 }];

      #import "SDImageCache.h"  缓存图片

  [[SDImageCache sharedImageCache] storeImage:image forKey:@"anUrlString" toDisk:NO]; 
(3)实现过程:

4.多线程

  NSThread/NSOperation/GCD 具体的就不介绍了。  

  注:自己编写的单例需要使用GCD

  eg:

+(SaveInfo*)shareDataModle{

    static dispatch_once_t pred;

    static SaveInfo *currentUser;

    dispatch_once(&pred, ^{

        currentUser = [[SaveInfo alloc] init];

    });

    return currentUser;

}

 5.屏幕适配

   masonry /storyboard上建约束(也可以手动建)

6.swift

  6.1 Swift和Objective-C分别是什么?两者相比有何不同之处,又有何联系?

          Swift是一款易学易用的编程语言,而且它还是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言

          Objective-C是扩充C的面向对象编程语言

         区别:语法;

         联系:swift与Objective-C共用同一套运行时环境;在同一个工程中可以同时使用两者。

 6.2 为什么Optional在Swift语言中非常重要?        

       因为Swift是强类型语言,为了解决nil类型不详的问题,不得不引入Optional封装nil,nil有了类型后,才能融入强类型语言范畴

 6.3 请解释一下NSError。在Swift中,什么情况下能使用NSError ,什么情况下不能?

       NSError:专门处理错误的类。

       Swift 现在应该是通过返回一个元组的方式来处理错误的。在写新代码的时候采用这种方式。当使用以前的代码或库,即,需要传error指针的时候,还是采用以前的方式吧

 6.4 请说明如何使用Instancetype及其重要性。

   instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!好处:确定对象类型帮编译器更好定位代码问题。

 6.5 在Swift中,什么时候该用let,什么时候该用var?

      声明常量使用let; 声明变量使用 var

7 .常见题目

        a. 是否熟知CocoaPods?它是什么?如何运行的?

              CocoaPods:是一个用来帮助我们管理第三方依赖库的工具  

               作用:解决库与库之前的依赖关系

               运行:在ruby 下通过命令行运行

       b. 请概括一下你对软件授权的理解,及其对软件开发的影响。

            软件授权是软件保护概念的延伸和发展。

            影响:在未经人/公司的授权下,不能使用他人核心技术进行开发和使用。

       c. 请概括一下你在构建iOS应用时的测试过程。iOS应用如何实现对其他语言、日期格式以及货币单位的支持?

            测试过程: 在开发者中心对测试手机进行注册(UDID),配置证书以及描述文件;然后到程序内进行对应的配置 (http://mobile.51cto.com/iphone-279470.htm

            其他语言的支持:为其他语言配置资源(http://www.cocoachina.com/ios/20151120/14258.html

       d. 请描述一下Instruments及其作用。

            Instruments 一个很灵活的、强大的工具,是性能分析、动态跟踪 和分析OS X以及iOS代码的测试工具

            作用:查看内存使用情况,检查泄漏的内存;性能分析 ,查看内存分配等;(http://www.jianshu.com/p/92cd90e65d4c)

关于iOS技术

 1. 请解释一下Handoff是什么,并简述它是如何实现iOS、Mac/网页应用互通的。

        Handoff:  是在 OS X 和 iOS 中引入的一种功能,可以在与同一用户关联的多个设备之间传输用户活动。

       互通:Handoff Programming Guide

 2. iCloud包含了哪些技术与服务?

    iCloud是苹果公司所提供的云端服务

   包含以下服务: 在线邮件;在线通讯录;在线日历;在线备忘录;在线提醒事件;查找我的iPhone;iWork,支持在线编辑文档、数据表格和幻灯片

   补充:iCloud备份与iTunes备份的区别:

           iCloud 云端备份,速度比较慢且备份不全;iTunes在本地电脑上备份,备份速度快,可以全盘备份

 3. iOS扩展是指?能否列举一些热门或常见的范例?

    扩展(Extension):通常指的是类扩展

    常见范例:iOS 8系统有6个支持扩展的系统区域,分别是Today、Share、Action、Photo Editing、Storage Provider、Custom keyboard。支持扩展的系统区域也被称为扩展点。(http://blog.csdn.net/qq652684328/article/details/46336587)

   补充: 分类跟扩展的异同

               同:都可以为类添加额外的方法       

               异:分类必须在.h中声明方法并且在.m中实现该方法; 扩展可以不用声明方法,但是必须实现方法。

 4. HealthKit是什么?

      HealthKit:是一个框架,用来与苹果的健康应用做数据交互.

 5. HomeKit是什么?

     HomeKit:是一个库,用来沟通和控制家庭自动化配件的

 6. Apple Pay是什么?能否描述一下如何在应用中使用Apple Pay?

   apple pay:是苹果开发的一种移动支付功能,相当于支付宝,绑定自己的信用卡或者借记卡,付款时直接用apple pay 付款。

   集成:http://www.cocoachina.com/ios/20141024/10026.html

 7. 请解释一下iOS应用沙盒机制。

    iOS应用程序只能在为该程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒。

 8. VoiceOver是什么?请举例解释一下iOS中的辅助功能(Accessibility)。开发者如何使用这些功能?

     VoiceOver :苹果手机上一个给视力不好或者盲人使用应用程序的语音辅助软件。

     辅助功能 :  http://blog.csdn.net/CHENYUFENG1991/article/details/49207669

 9. iOS应用是如何实现后台多任务处理(Multitasking)的? (http://www.jianshu.com/p/8a752f263e30

 10. Game Center针对iOS游戏有哪些功能?

       Game Center(苹果游戏中心)是专为游戏玩家设计的社交网络平台。借助Game Center,用户可以收发好友请求,可以邀请好友通过互联网参与多人游戏。

 11. iBeacons是什么?

      iBeacons:是iOS7新推出的特性。它给予当前最新的蓝牙低功耗4.0技术,可以用它来建立打造一个信号基站,当用户持有iOS设备进入该区域时,就会获得该基站的推送信息。而且它有个天然的优势就是在室内时,由于各种障碍物阻挡,用iBeacons技术搭建的基站要比GPS定位更好

 12. Cocoa/Cocoa Touch是什么,包含什么,不包含什么?   

       cocoa包含Foundation和AppKit框架,可用于开发Mac OS X系统的应用程序
       cocoa touch包含Foundation和UIKit框架,可用于开发iPhone OS 系统的应用程序    

 13. 请概括一下Core Audio,Core Data以及Core Location各是什么。它们对iOS应用有何意义?

       Core Audio:是iOS和Mac关于数字音频处理的基础,它提供应用程序处理音频的一组软件框架,所有关于iOS的音频开发接口都是由Core Audio来提供或它提供的接口来封装实现的。

       Core Data:是iOS和Mac用语数据物理存储提供的一组软件框架,它支持数据库(sqlite)存储以及文件存储方式;而Core Data则提供了存储管理,它有插入,查询,删除更新等一系列操作。

       Core Location:是iOS提供的定位服务功能;提供各种各样的API,根据不同的API可以获取各个精度的地理位置。

 14. 请描述SpriteKit和SceneKit的作用。

        SpriteKit在IOS和OS X中均可使用,它使用主机设备提供的图形硬件来高帧速率合成2D图片;

        SceneKit可以同时在IOS和OS X下工作, 是用来构建3D场景的框架,且可以与Core Animation和SpriteKit无缝交互。在SceneKit中可以直接引入COLLADA行业标准文件制作好的3D模型或场景。

 15. Metal是什么?        

    在iOS8中,苹果发布了一个新的接口叫做Metal,它是一个支持GPU加速的3D绘图API。Metal和OpenGL ES类似,也是一个底层API,负责和3D绘图硬件交互。可惜的是,Metal不是跨平台的

          OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。   提供2D3D绘图工具的一个框架   需要导入  OpenGLES.framework  框架


 16. 响应链(Responder Chain)是什么?它是如何发挥作用的?(https://zhidao.baidu.com/question/1113481630861056779.html

        响应链:是由响应者(Responder object)之间的touch消息传递以及检测组成,我们也可以理解为响应链是由响应者组成

       传递的方向就是从最上面的view向下传递,如果view是view controller的view,还会经过view controller之后在向下传递,最终到达app对象。

 17. 按钮和其他控制方式对哪些操作做出回应?     

  点击事件,跳转事件等

 18. AppDelegate扮演着什么样的角色? 

       AppDelegate为整个应用的一个代理,提供程序启动、退出等类似监控的接口,控制着应用的生命周期。

 19. 请解释一下NSUserDefaults。就你而言,你会如何在磁盘中对数组对象进行序列化?

      NSUserDefaults是一个用于数据存储的类。

      序列化:给这个对象的类实现NSCoding协议,然后直接将整个数组归档;将对象转换为字典,然后再归档或者直接writeToFile;将对象转换为字典,然后转换为JSON或者XML并保存。

 20. 你会如何储存用户的认证信息?

      如果是用户名/密码等 可存本地.  重要信息可存 Keychain。

 21. 请问何为Keychain服务?

        Keychain提供了安全的存储服务,用来存储一些敏感信息(http://www.jianshu.com/p/79a140027136

 22. 为什么移动设备上的缓存和压缩是不可或缺的?

       缓存跟压缩都是减少内存占用的方法,而内存对于用户来说是非常宝贵的。

 23. 请解释一下~/Documents,~/Library和~/tmp。 iOS中的~属于什么目录?

       Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。

       Library:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

       tmp:提供一个即时创建临时文件的地方。(临时目录)

 24. AirPlay是如何运行的?换做是你,你会如何通过编程提高应用的实用性以及演示效果?      

   AirPlay(简称AP,中文名称:飞乐)是一款小巧的免费音频播放器,有简体中文和繁体中文两个语言版本。
   运行:是通过网络实现投放声音和视频信息的,当然还得要有一个接受 AirPlay 的设备装置。

 25. 传感器,IO以及WiFi、拨号等连接方式如何在iOS平台上运作?它们有何利用价值?请扼要地谈谈你的观点。

       传感器:http://www.jianshu.com/p/233be81b8ead

 26. iPad 2,iPad mini 1-3,iPad Retina,iPad Air 2,iPhone 5、5S、6以及6+在硬件性能方面有何差异?这对注重性能的应用有何限制?

        屏幕尺寸;机身颜色;重量等都不一样;

关于编程

  1.  Cocoa Touch包含什么?不包含什么?

          包含:UIKit/Foundation ; 不包含:Media/Core Services/Core OS        

  2.  为什么Cocoa Touch的类名称是以两个大写字母开头的?

          OC没有命名空间的概念,使用这样大写字母前缀的方式可以有效的避免命名冲突的问题。 

  3.  为什么map函数必不可少?该在什么情况下使用它?

         map是一种基本的数据结构,它提供了很好一对一的关系,能够非常方便的进行查找 ; 在需要使用一对一关系的时候使用。

  4.  你会选择什么工具来追踪Bug?

        友盟的错误捕捉分析。         

  5.  如果在Cocoa中发现一个Bug,你会如何处理?

        断点调试,找到bug出现的地方与原因分析,然后进行修改

  6.  如果应用的新版本出现了Regression的情况,该如何补救?如何防止用户在使用过程中遇到新的Bug?

        了解为什么会出现Regression Bug。例如是Regression 测试覆盖不够全面,还是其他什么原因。修正问题,追加对应的测试项,重新Regression测试。

 7.  Objective-C的类是怎么执行的?Objective-C Runtime是如何实现的?

        http://www.cnblogs.com/Mr-Lin/p/5771969.html

 8.  iOS是如何提高安全性,保护用户隐私信息的?

        http://www.jianshu.com/p/50287cc0897f

 9.  应用可以下载并即刻显示数据。如何根据MVC来判断下载的最佳位置?

 10. MVC对代码库(Codebase)的设计有何影响?

        使得代码库 耦合性低,重用性高,可维护性高

 11. Controller Life-Cycle以及View Life-cycle分别有哪些调试方法?

        断点调试,打印调试 等

 12. iOS使用的是哪些设计模式(Design Patterns)?你的代码库使用的是哪些设计模式?

       单例模式;工厂模式;观察者模式;代理模式;MVC;   

 13. iOS提供哪些线程?如何充分利用这些线程?

      NSThread/GCD/NSOperation

 14. 请简要描述一下UIScrollView的执行过程。它是如何响应手势识别(Gesture Recognizer)、多点触控(Multi-Touch)和Run Loop的?

       http://www.jianshu.com/p/cdcbf8c080ea

 15. 你认为iOS需要添加或改进哪些API?

       IOS10中新增的API:http://chuansong.me/n/403305351874

关于界面

  1. iPhone5、6、6+以及iPad Air 2的屏幕分辨率分别是多少?

         

  2. 分辨率的计算单位是什么?

         像素

  3. 请解释一下Interface Builder的作用以及NIB文件的概念。

      Interface Builder(IB)是Mac OS X平台下用于设计和测试用户界面(GUI)的应用程序(非开源)。

      作用:可以利用它合理地划分项目时,可以避免很多潜在的冲突。

      NIB文件:Nib文件是Interface Builder文档,是基于磁盘的资源文件,用于存储一或多个对象的快照

  4. iOS UI的图像储存类型是什么?

        NSData

  5. 请描述一下Storyboard和标准NIB文件的差别。

        http://www.jianshu.com/p/a5b3ea382ea3

  6. 设备状态栏(Device Status Bar)是什么?高度如何?是否透明?在手机通话或者导航状态下,它是如何显示的?

        高度:20    默认不透名

  7. 导航栏(Navigation Bar)是什么?能否拿出你的iPhone,指出你下载的哪些应用运用了导航栏?

      

  8. 选项卡(Tab Bar)和工具栏(Toolbar)分别是什么?两者之间有何共同点和不同点?

         Tab Bar:提供一种机制来显示一个选项卡位于屏幕底部的工具栏和支持显示和选择的选项卡栏项(UITabBarItem的实例)。您可以使用UITabBarDelegate指定自定义视图选项卡栏项。

         Toolbar:提供一种机制来显示一个工具栏在屏幕的底部和支持显示和选择的工具栏项目(UIToolbarItem的实例)。您可以使用UIToolbarDelegate指定自定义工具栏项目视图。

        共同点:都可以添加Button和Label控件

        不同点:Tab Bar上只能添加,Tab Bar Item控件 ; 前者不能修改位置和高度

  9. 表视图(Table View)是什么?集合视图(Collection View)又是什么?

         TableView : 是用于数据显示的控件

         CollectionView:用于展示集合视图,布局更加灵活,可实现多列布局。 用法与tableView 相似。

  10. 什么时候用“弹出(Popover)”属性最为合适?

           需要弹出以及隐藏控件的时候。

  11. Split-view Controller是什么?

           SplitViewController:分割视图控制器(http://www.cnblogs.com/wayne23/p/3596814.html

  12. 选取器视图(Picker View)适合存放哪类内容?

           string类型的字符串等           

  13. 应该在什么情况下使用标签、文本域和文本视图?

       标签(UILabel): 展示少量数据

       文本域(UITextView): 输入大量内容

       文本视图(UITextField): 输入少量数据

  14. 分段控件(Segmented Control)的作用是什么?

        分段控件让用户在一屏内就可以查看到不同分类的内容,而不需要切换到其他屏幕。

  15. 模态视图(Modal View)是什么?

        对于模态视图和普通视图最主要的区别就是模态视图显示的时候不能对其他视图进行操作。主要用来收集或显示一些信息。

  16. iOS通知属于什么类型?

关于设计

  1. iOS应用图标是指什么?请尽可能详细地描述一下。

       http://www.jianshu.com/p/c90dd8a5f6a8

  2. 最小尺寸和最大尺寸的应用图标分别是什么样子的?

  3. 应用图标能否包含透明的部分?

          不能

  4. Newsstand的图标与常规应用有何不同?

       “Newsstand”,有“报摊”之意。该版块分三部分:1.Newspapers报纸 2.Magazines杂志 3.数字信息

         Newsstand的图标最长边缘至少1024像素(http://blog.csdn.net/loumzy/article/details/46117293

  5. 请解释一下启动画面(Launch Images)。

       什么是启动画面:启动应用程序后,进入主功能界面前会有一张图片或一段动画效果,停留数秒钟后消失。这张图片或这段动画效果我们称之为应用的启动画面。

      为什么需要启动画面:提高用户体验。

  6. 自动布局(Auto Layout)的作用是什么?请概括一下它是如何运行的。

      作用:给视图添加约束并且定义他们之间的关系

  7. 设计软件时为什么要加上动画?

              提高用户体验。

  8. 请描述一下软件设计中的交互和Feedback有什么作用。

            帮助产品功能的完善,提高用户体验。

  9. 设计iPhone和iPad应用时,应分别考虑哪些因素?

          考虑是出单版还是通用版,这就要考虑不同的分辨率

  10. 请描述一下原型设计对于软件开发的意义。其作用是什么?

          确保页面的美化。

关于App Store

  1. 应用内购买(In-App Purchases)是怎么回事?IAP能够为用户带来哪些新体验?

        应用内购买可以让开发者通过苹果的Store Kit框架在应用中内嵌一个商店。通过应用内购买,开发者可以开发一个基本的应用,并且在应用商店销售额外的功能和内容

  2. 你是否在App Store上发布过应用?能否概括一下过程?

  3. iTunes Connect是什么?

      iTunes Connect是一套基于 Web 的工具,专为开发人员创建,用以提交和管理在 App Store 或 Mac App Store 上销售的 App。

  4. Provisioning Profiles是指?

     配置文件 

    Certificate、Provisioning Profile、App ID的关系介绍:http://blog.csdn.net/joosonmao/article/details/21172835

  5. App ID是什么?

     应用程序软件编号

  6. iOS的开发和发布签名证书有何异同?

   开发证书是用来测试的,需要将设备绑定到账号,才可以识别,在真机调试的时候可以看程序打印;
发布证书主要用来打包发布APP用的,也可用于真机调试,但是看不到程序打印。

  7. 如何使用TestFlight?通过Ad-hoc发布应用的话,该如何使用UUID?

        到appStore 上下载TestFlight,需要别人邀请,才能使用。       

   Ad-hoc是苹果公司是为应用发布提供的一种发布前测试方法,所要安装的设备无需破解。其用途在于:如果你开发了一款iphone应用,
想在发布之前,让周围人帮忙测试一下。 这时,你需要得到测试人的 iphone UDID,生成一个Ad-hoc应用,并将该应用和对应的 mobileProvision 打包发给测试对象。 测试对象在收到以上两个文件后,开始安装。
iPhone Ad-hoc 应用安装步骤如下: 1. 打开 iTunes, 选中 Library区域的 Application 页面,将所要安装的应用程序 .app 文件 和 mobileprovision文件 拖放到该应用页面中。这时,会出现一个应用程序图标;
2. 在iTunes 页面,选中(iPhone、itouch、iPad)设备,进入“应用”项,勾选所要安装的应用,点击“同步”按钮 ,应用开始同步到设备中。 在同时时, 要注意观察iTunes 工具栏区域的 同步进度条, 确认是否显示 该应用 的名称。 只有出现了该应用名称的同步进度条,才能肯定 该应用确实已经被同步到 设备中。 注意:在同步过程中不要断开数据线。安装完成后,设备的主屏(Home Screen)上会出现所安装的应用程序图标
  

  8. 应何时验证购买收据?    

        app 发送 支付请求到app store-》app store 处理支付请求,返回transaction信息-》app 将transaction receipt 发送到服务器 -》服务器收到收据后发送到app stroe验证收据的有效性-》app store 返回收据的验证结果-》根据app store 返回的结果决定用户是否购买成功

  9. 发布iAds(苹果平台广告)有哪些要求?

      目前,所有可用于News应用的广告形式,总共7种,分别为标准横幅、中等矩形横幅、双倍横幅、大横幅、空隙横幅、前置视频、原生横幅。

趣味问答

  1. 谈一谈你常用的开发工具都有哪些优势?

      便捷的代码管理器,自动生成类关系图、函数方法列表等;

  2. 你最敬佩的独立Mac或者iOS应用开发者是谁?

  3. 最喜欢什么项目?哪种类型的?

       购物类型的吧。

  4. 你觉得Xcode有哪些需要改进的地方?

      崩溃提示。

  5. iOS上你最喜欢哪些API?

  6. 是否有最中意的错误报告?          

  7. 你最爱以哪种方式来检验一项新技术是否好用?

      语法是否简洁等;

  8. 为什么词典被称作Dictionaries,而不是HashTable或HashMap?

        为了与java中的字典(HashMap)区分;java中的hashMap 允许空key跟空value  ,而ios 中是不允许空key 的。

 

other:

  1.  UIView animateWithDuration 中的block使用self是否会导致循环引用,为什么?

         不会,因为这是一个类方法,当前的self并没有直接或间接持有这个block;(animation framework -> block  -> self)

         详情请参考     

 

 

其他面试题参考:http://www.shellsec.com/news/40397.html

posted @ 2016-10-09 13:57  青语  阅读(560)  评论(0编辑  收藏  举报