电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

iOS开发/设计程序员面试题

来源:文库作者:开心麻花2026-01-071

iOS开发/设计程序员面试题(精选6篇)

iOS开发/设计程序员面试题 第1篇

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

关于界面

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

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

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

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

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

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

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

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

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

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

Split-view Controller是什么?

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

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

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

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

iOS通知属于什么类型?

关于设计

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

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

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

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

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

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

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

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

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

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

关于App Store

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

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

iTunes Connect是什么?

Provisioning Profiles是指?

App ID是什么?

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

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

应何时验证购买收据?

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

趣味问答

最近有没有开发什么好玩的东西?你最引以为豪的作品是什么?

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

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

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

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

iOS上你最喜欢哪些API?

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

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

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

iOS开发/设计程序员面试题 第2篇

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分)

iOS开发/设计程序员面试题 第3篇

1 系统设计目的和意义

通过手机移动端获取相关农业的消息已经成为中国百万农民乃至从事农业相关行业人们必做的事情,但是面对浩瀚的新闻,人们每天花费相当大的时间挑选农业相关的消息。面对巨大的用户需求,市场上却没有针对农业相关信息的手机APP。利用i OS简约,操作方便等特点[1],根据农民和从事农业相关行业人们的需要,把农业消息和知识进行分类整理,方便查找特别关注的模块。有利于解决农民信息查找困难,盲目种植等问题。

2 系统功能设计

本系统主要包括农资,种植,教育培训,农业科技,政策法规等模块的内容,实现文本新闻的展示、用户本地收藏、定位地点的天气预报、清除缓存、夜间模式等功能。

1)农资新闻模块:查看图片,查看详情,添加|取消收藏,清除缓存。

2)种植模块:查看图片,查看详情,添加|取消收藏,清除缓存。

3)教育培训模块:查看图片,视频播放,新闻列表,查看详情,添加|取消收藏,清除缓存。

4)农业科技模块:查看详情,视频播放,添加|取消收藏,清除缓存。

5)政策法规模块:查看新闻,添加|取消收藏,清除缓存。

3 应用的详细设计

3.1 数据网络请求

数据请求遵循http协议。引入第三方库AFNetworking封装LYMRequeat,与服务器通信变得更简单。它的是基于Objective-C语言实现的一套可在MAC OSX和i Phone应用中使用的第三方库。它适用于执行基本的HTTP请求和上传。整体构建在NSURLConnection,NSOperation,以及其他熟悉的Foundation技术之上,使用AFHTTPRequest Operation实现数据的请求得到数据后,使用AFJSONRequest Operation进行数据解析。

3.2 数据抽象

为增强数据请求后的使用效率,在项目中使用数据Model数据抽象封装,根据各个不同的界面、功能及后台返回数据的结构罗列出所需数据的抽象,这实现基类LYMModel用对对象的统一管理,New,Collection New,Photo New,Common Model。引入第三方库Mantle,使用映射关系将JSON数据解析转换为所指定Model对象,简化数据处理的难度[2]。

3.3 数据库

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,在本项目中涉及到数据的本地持久化保存,考虑到所需保存的数据量较小,因此使用SQLite,SQLite是一款轻型的嵌入式数据库,它占用资源非常的低[3]。引入第三方FMDB作为数据的管理框架,提供多线程安全的数据库操作方法,有效地防止数据混乱,同时基于FMDB做一层封装确保数据存储的统一性,实现LYMDBTool、LYMDBColumn Des、LYMDBSQLState。

4 技术难点突破

4.1 网络数据请求的算法统一化

虽然第三方库AFNetworking高度封装,在用到AFNetworking发请求的类里,我们直接调用AFNetworking的API。但是,在实际开发中通常将设备、版本、和账户等描述信息进行拆分、拼接、组装,在接口中作为参数集中提交到服务器。单独封装一个LYMRequest网络请求抽象类,做集中处理,会更方便管理,便于复用和扩展[4]。

4.2 数据库算法统一化

数据库用于本地的数据存储,本项目中引入第三方库FMDB用于数据库的操作,但由于FMDB的使用仍需要进行大量的SQL语言的编写,且数据存储的方式不是直接面向对象的,因此封装LYMDBSQLState用于对SQL语言的操作,并将所有继承与LYMDBModel类对象通过运行时的方式获取对象中需要存储的属性,再通过一套映射的算法将属性名与对应数据存于数据库中。

4.3 UI自定义界面布局的实现

新闻信息中的图文混排的处理是一个比较难实现的展现形式,为确保整体浏览的流畅性,保证图文的合理性,使用i OS自带sdk的图文混排组建Core Text,Core Text库中提供很多的工具来对文本进行操作。

5 结束语

基于i OS的农业新闻手机APP能较大程度上缓解人们花费较大时间查找专门农业新闻压力,让人们使用手机利用碎片时间随时随地观看操作简洁,画面流畅,集中丰富的农业新闻。

摘要:设计开发一款基于iOS的农业新闻客户端,应用涵盖农资、种植、教育培训、农业科技及政策法规等内容,实现文本新闻的展示、用户本地收藏、定位地点天气预报、清除缓存、夜间模式等功能。文章重点阐述应用的设计思路,技术难点和解决方案。

关键词:农业新闻,iOS,手机APP

参考文献

[1]王建鑫.基于i OS的新浪Sina微博i OS客户端客户端的实现[D].济南:山东大学,2013.

[2]王凌燕,刘亚辉.基于IOS的新浪微博客户端设计与实现[J].吉林省教育学院学报(中旬),2013(11):145-146.

[3]于京伟.掌上移动应用设计与实现[D].吉林大学,2015.

iOS开发/设计程序员面试题 第4篇

【关键词】iOS技术;演唱会咨讯及购票平台;系统设计

随着中国经济的持续发展,演唱会消费越来越成为人民文化消费的重要组成部分,演唱会消费市场因此蓬勃发展。由于智能手机的普及,人民已经迎来移动互联网的时代。所以,搭建一个基于移动互联网的关于演唱会咨询以及购票的平台将给人们带来极大的方便,同时也会大大促进演唱会消费市场的发展。

1、详细设计

1.1、推荐页

(1)推荐页功能描述

推荐页内容的组成:城市选择按钮、分类、UITableView。在XIB上面添加一个320 * 300的UIView视图作为轮播视图的背景视图,在View上面添加上添加一个UIScrollView视图作为轮播视图,一个UILabel作为名称视图。项目启动的时候首先会通过地图定位获取到当前的坐标经纬度,对坐标进行反编码得到当前所在城市的名字,将城市名字通过block语法传到首页,以城市的名字作为字典的key获取字典的value值也就是城市的id,将id传入接口获得首页所需要的数据,将数据解析添加到视图上

1.2 演出页

动态页的组成:刷新按钮、好友动态列表。在控制器的视图上面添加一个UITableView列表视图,自定义封装列表视图里面的内容,先添加一个UIview作为背景视图,在view添加一个30 * 30的UIImageView作为头像视图,添加五个label按要求布好句作为内容和标签的显示视图,通过-(id)initWithStyle?UITableViewCellStyle)style reuseIdentifier?NSString *)reuseIdentifier加载到UITableView上。要进入动态页需要先登录,登录成功后会获取一个用户的私人id通过id请求网络获取到数据进行展示。当进入动态详情页会将一级页面的数据进行筛选处理然后通过点语法保存传到二级页面,在二级页面进行展示,通过获取到的经纬度,调用MapView来做地图定位。

1.3电影页

电影页的组成:正在热映、即将上映、城市选择。通过调用系统的方法可以打开系统相册或相机(需要真机),选择相片通过代理方法将选中的相片显示在事先定义好的UIImageView上面。评价通过for语句循环遍历五个button当点击button的时候为button添加一个图片,通过取反的思想当再次点击的时候就隐藏图片。评论是一个UITextField控件,点击时候会通过代理方法调用出来键盘,同时底部视图会上移一定距离,上移的过程中对其添加了动画,再次点击的时候让键盘对象失去第一响应者隐藏键盘,将你输入内容作为参数通过接口上传到服务器。

1.4 个人中心页

个人中心页的组成:用户头像、设置、注册、登录、我的订单、我的收藏、收货地址、我的优惠券。在控制器的视图上面添加一个UITableView列表视图,自定义封装一个视图,在自定的视图上添加ImagView、Label、Button按照要求进行布局,将自定义封装的视图做一个UitableView的头部视图添加到tableview上,可以实现滑动的效果,视图布局完成后通过用户的id请求网路获取json数据,解析数据对数据内的一维数组进行二维数组的转换,获取的粉丝数据是一个很大的数通过类型转换处理后保存数据然后进行加载展示。

2登录的流程设计

自定义的登陆与注册页面,在注册页面你需要输入的你的邮箱或者是电话的名称进行验证,定义自己的昵称设置自己的秘密,密码需要设置两次,只有两次的秘密相同了才能通过注册,注册成功以后,你就可以到登陆页面进行登陆。登陆页面有输入你注册所用的用户邮箱(电话号码),然后是你的设置的密码,当你的用户邮箱(电话号码)和密码都匹配的时候你才可以登陆成功,成功后会获取到你当前用户的所有信息,以及做一些更深入的操作。

3 设计约束

3. 1 需求约束

(1)软件运行环境约束:能保证兼容从iOS4.3一直到iOS6.1.2完美运行;

(2)硬件运行环境环境(包括运行环境和开发环境)的约束:本系统必须保证能完美运行在iPhone4、iPhone4S、iPhone5、iPhone5S、iPhone5C、iPhone6、iPhone6Plus上面;必须对iPhone5进行完美适配。

(3)接口/协议的约束:保证接口的安全性,必须对接口进行加密,加密规则禁止外泄,统一采用JSON接口格式约束;

(4)用户界面的约束:用户界面UI必须和需求保持一致,严谨出现拉伸,挤压的界面;

4. 设计模式

4.1 单例设计模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

4.2工厂方法设计模式

工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。

工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。

4.3 通知设计模式

Cocoa 的NSNotification类的实例封装了要广播的消息,有兴趣接收信息的对象将利用Cocoa 的NSNotificationCenter类的实例注册它们自己。注册的对象称为观察者。

当将一条通知发送到通知中心时,通知中心会把该通知分发给合适的观察者。单个通知可能被广播给任意数量的观察者,把消息发送到通知中心的对象不需要知道有哪些观察者存在,或者有多少个观者者最终会接收到通知。类似的,观察者不一定需要知道通知来源于何处。

当匿名对象需要被动地观察和反应重要事件时,可以使用通知模式。通知设计模式设计事例:

-(void)zhengObserver(id)observersa selector?SEL)aSelectora name?Nsstring *)aName object?id)aObject;

4.4 鍵值观察设计模式

一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的。观察者模式较完美地将目标对象与观察者对象解耦。

IOS开发工程师面试题 第5篇

IOS开发工程师面试题(45分钟)

1.请详述viewController的生命周期?

2.OC中类的属性retain, assign, weak, strong的作用是什么?

3.OC中SEL是什么,有什么作用?

4.如何在OC的字典或数组中存取一个基本数据类型的值?如何把字典或数组中的值转换成基本数据类型的值?

5.IOS中界面间传值的方式有哪些?

6.OC中通知有哪几类?请简述苹果推送的流程?

7.OC中浅拷贝和深拷贝的区别是什么?

8.什么是block?block如何使用?

9.谈谈OC中内存管理的方式和过程,以及ARC的使用注意事项,如何在ARC的工

程中使用非ARC的类和开源框架?

10.简要说明下OC的延展和分类的作用和区别

11.OC中多线程的实现方式有哪些?如何实现在一个异步线程中使用一个定时器?

12.请例举常用的网络请求开源框架、JSON解析开源框架、UI开源框架。

13.请详述如何使app对IOS6、IOS7、iphone4S、iphone5做界面适配的方法

iOS开发/设计程序员面试题 第6篇

1.有n个人围坐成一圈(假设他们的编号沿顺时针方向依次为1到n),编程序,使用数组来存放各数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(其中k>1由用户输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1开始数起,数到k后,淘汰第2个人;如此继续,直到最后剩下一个人时停止。请输出先后被“淘汰”的人的编号。

2.编码实现:

1)由键盘上输入任意n个符号,输出它的全排列。

2)找出所有从m个元素中选取n(n<=m)元素的组合。

3.要求:描述越全面越好,最好有部分代码实现。

1)试描述iOS的网络获取机制。

提示:1.网络获取与数据解析的过程

2.post与get的用法3.同步与异步处理4.关于Webkit

2)试简述对于缓存机制的理解。

提示:1.应用缓存机制的情况

iOS开发/设计程序员面试题

iOS开发/设计程序员面试题(精选6篇)iOS开发/设计程序员面试题 第1篇请解释一下NSError。在Swift中,什么情况下能使用NSError ,什么情...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部