iOS 面试 - 应用

2019-06-29  本文已影响0人  Crics

程序执行的过程

解析Info.plist

        加载相关信息,例如如闪屏。

        沙箱建立、权限检查。

Mach-O加载

        如果是胖二进制文件,寻找合适当前CPU类别的部分。

        加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)。

        定位内部、外部指针引用,例如字符串、函数等。

        执行声明为attribute((constructor))的C函数。

        加载类扩展(Category)中的方法。

        C++静态对象加载、调用Objc的 +load 函数。

程序执行

        1.main函数

        2.执行UIApplicationMain函数

                1.创建UIApplication对象。

                2.创建UIApplicationDelegate对象并复制。

                3.读取配置文件info.plist,设置程序启动的一些属性。

                4.创建应用程序的Main Runloop循环。

        3.UIApplicationDelegate对象开始处理监听到的事件

                1.程序启动成功之后,首先调用application:didFinishLaunchingWithOptions:方法,如果info.plist文件中配置了启动storyboard文件名,则加载storyboard文件。如果没有配置,则根据代码来创建UIWindow--->UIWindow的rootViewController-->显示。

在一个UI的正中间实现一个正方形的红色视图有几种方式?

UIViewController的生命周期是什么?追问 UIViewController 只alloc而没用到的时候,在init方法里面,设置背景颜色,会生效吗 会生效。为什么会?

按照执行顺序排列:  

1、 initWithCoder:通过nib文件初始化时触发。

2、awakeFromNib:nib文件被加载的时候,会发生一个awakeFromNib的消息到nib文件中的每个对象。

3、 loadView:开始加载视图控制器自带的view。

4、 viewDidLoad:视图控制器的view被加载完成。 

5、 viewWillAppear:视图控制器的view将要显示在window上。   

6、updateViewConstraints:视图控制器的view开始更新AutoLayout约束。

7、viewWillLayoutSubviews:视图控制器的view将要更新内容视图的位置。

8、viewDidLayoutSubviews:视图控制器的view已经更新视图的位置。

9、viewDidAppear:视图控制器的view已经展示到window上。  

10、 viewWillDisappear:视图控制器的view将要从window上消失。 

11、viewDidDisappear:视图控制器的view已经从window上消失。

UIViewController 的view是否加载了?如果没有加载那什么时候加载?直接用UILabel和自己用DrawRect画UILabel,哪个性能好?为什么?哪个占用的内存少?为什么?

如何通过一个view查找它所在的viewController

如何扩大view的响应范围

iOS的应用程序有几种状态?追问,退到后台代码是否可以执行?双击home键,代码是否可以执行?

怎么自定义导航跳转

一般使用的图标内存为多大?比如200×300的图片,内存应该占用多少比较合理?

Images.xcassets和直接用图片有什么不一样?

layoutIfNeeded和setNeedsLayout的区别

微信分享大图如何实现,从进程的角度

一个上线的项目,知道这个方法可能会出问题,在不破坏改方法前提下,怎么搞?

单元测试框架?

OCUnit:OC 官方测试框架, 现在被 XCTest 所取代。

XCTest:是与 Foundation 框架平行的测试框架。

GHUnit 

OCMock

如何编写单元测试,比如写了一个网络库,如何测试该网络库,用例怎么写的更全面一些

介绍下APNS发送系统消息的机制

APNS优势:杜绝了类似安卓那种为了接受通知不停在后台唤醒程序保持长连接的行为,由iOS系统和APNS进行长连接替代。

APNS的原理:

        1、应用在通知中心注册,由iOS系统向APNS请求返回设备令牌(device Token)

        2、应用程序接收到设备令牌并发送给自己的后台服务器

        3、服务器把要推送的内容和设备发送给APNS

        4、APNS根据设备令牌找到设备,再由iOS根据APPID把推送内容展示

谈谈你对缓存方案的看法?

缓存方案一般有3种:

1、网络优先:也就是说开始总是从网络获取,如果获取失败,从本地获取。这个一般用在网络数据经常更新的情况。

2、本地优先:在一段时间内总是从本地获取数据,如果超过指定时间,再从网络重新获取。

3、混合方式:先从本地获取,先展示本地数据;同时从网络获取,请求完后刷新界面。

项目里面的数据存储都用了哪些?知道iOS里面有哪些数据存储方法?什么时候该用哪些方法存储?

NSUserDefault

KeyChain

plist

Archive

SQLite

CoreData

项目中如何保证数据的安全性

多屏幕适配

JSON转Model


上一篇 下一篇

猜你喜欢

热点阅读