【面试题】iOS开发知识体系
iOS开发知识体系
每个人心中都有一套自己的知识体系,对于iOS开发,我有自己的一套粗略的认识,望各位博友指正.
一,块.
1.iOS系统的SDK
iOS的SDK学习可能是初学者需要耗时最多的一个知识。因为其中有大量的库需要我们来学习掌握。其中最基本的几个为:
Foundation.framework
在你学习使用iOS的过程中,你会碰到大量的"NS"前缀的类库,这些类库基本上属于Foundation.framework,它是iOS开发的核心库,其中包括:常用数据结构(NSArray/NSDictionary/NSString 等)、网络(NSURL../NSHTTP..)、多线程(NSThread/NSNSOperation)等。
UIKit.framework
库使用"UI"为前缀的类库被包含在这个framework中,这些大部分是系统的UI层面的控件。如UIViewController、UIView、UIButton、UILabel等。使用这些控件才能构建出一个完整的APP。
QuartzCore.framework
iOS中绚丽而平滑的动画效果,是吸引人的一大利器,如果你想做出这样的效果,那你就得了解这个库了。iOS的核心动画的API都被包含在这个framework中,学会使用它才能让你的APP更加亮眼。
AVFoundation.framework
AVkit.framework
CFNetwork.framework
Mapkit.framework
..
2.UI(NSArray/NSDictionary/NSString)
(UIViewController/UIButton/UIView)
3.网络(NSURl/NSHTTP...)
网络这一块不仅仅指学会使用SDK中的网络API调用,而是指要去理解网络编程。
你需要知道HTTP协议消息结构
、GET/POST方法
、常见的状态码的意思
、Request/Response
。
你还需要知道与服务器通信使用的数据格式如:json、xml。
1、HTTP(HTTPS)、TCP、UDP协议的区别
2、同异步的GET和POST请求
3、AFNetworking封装的网络请求
4.数据库
数据库你需要知道基本的SQL语句 select/update/insert/delete的操作;
需要知道怎么连接表查询:外连接、内连接、自连接等;
需要知道实体数据一对一、一对多、多对多关系如何设计数据库表。
5.GitHub
iOS有着很浓厚的开源精神,在GitHub上有许多优秀的开源项目,在真正的开发过程中,某些著名的开源库大家也都广泛的使用着。如:
6.多线程(NSThread/NSOperotion...)
1、NSThread:优点是NSThread 比其他两个轻量级。缺点是需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销。
2、NSOperaion:优点是不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。Cocoa operation 相关的类是 NSOperation ,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
3、GCD:Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。现在的iOS系统都升级到7了,所以不用担心该技术不能使用。
7.第三方库
8.第三方插件
1、代码注释生成器:VVDocumenter
2、CocoaPods插件,省去那些命令行了:CocoaPods for Xcode
3、imageName提示并且自动补全:KSImageNamed-Xcode
4、
9. 上线流程
1、准备好证书和素材
2、iOS上架的一般流程
10.oc
1.运行时特性
2.protocol
3.cetegory分类
4.estension扩展
类别Category和扩展Extension的区别:Category可以增加类的额外方法,一般不能增加类的属性(在runtime下可以),而Extension可以增加额外方法和属性,但其中的方法一定要在@implementation内实现,否则编译报错。
5.引用计数器
6.block
11.系统控件
1.自定义控件
2.换肤
3.多语言(国际化)
4.手势
5.Info.plist
6.pch文件
6.XML
7.Stroyboard
12.知识点
1.分享
2.聊天(IM,即时通讯,网易云信/融云/环信..)
3.附近(LBS)
4.支付
5.蓝牙
6.直播
7.音频视频
8.地图
9.推送
1、点击推送开发的一般流程
2、接入极光、友盟、信鸽、百度等第三方推送服务
13.设计模式
1.MVC/MVP/MVVM
MVC:即Model - View - Controller,因为大量的逻辑在controller里,显得臃肿。
MVVM:MVC的加强版,即Model - View - View Model,Model是数据对象,View只做视 图显示,Controller是连接器,而View Model则是处理处理数据和视图的逻辑,MVVM的好处是使得Controller很轻量,不臃肿。
2.工厂模式
3.单例模式
4.观察者模式(KVO/KVC)
5.
1、创建型:单例设计模式、抽象工厂设计模式
2、结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式
3、行为型:责任链设计模式、观察者设计模式,备忘录设计模式、命令设计模式
14.三大方式
1.代理(Delegate)
2.block
3.通知
15.其他语言
1.c(基础也是进阶)
2.swift(未来趋势)
2.HTML5
3.js
4.java
16.持久化
一,本地数据缓存
1、写入plist文件;
2、使用系统类NSUserdefault;
3、归档;
4、使用系统数据库coreData;
5、使用FMDB数据库。
17.工具
一,使用svn、Git或者第三方项目管理工具
1、svn工具:Cornerstone.app和Versions.app,也可以使用Mac自带的,看看教程吧
2、git工具:SourceTree
18.面试相关
1)、SDWebimage的实现原理
答案:1、先把默认图片显示,然后SDImageCache先从内存中查找,有就显示,没有就去硬盘上查找,查到就添加到内存中,并且显示图片,如果硬盘中也读取不到图片,那就会 alloc 一个SDWebimageDownloader,异步加载图片,加载完成显示图片,并且保存到SDImageCache中,在内存和硬盘中同时保存。SDImageCache在初始化的时候会注册一些通知,在内存警告或退到后台的时候清理内存图片缓存,应用结束的时候清理过期图片。
2)、单例的原理和实现以及用处
1、原理:在一个程序进程中只会实例化一次
2、实现(不太严格,因为还是可以alloc)
+ (AccountManager *)sharedManager {
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
3、用处:保证对象的唯一性,系统的UIApplication(应用程序实例)、NSNotificationCenter(消息中心)、NSFileManager(文件管理)、NSUserDefaults(应用程序设置)、NSURLCache(请求缓存)、NSHTTPCookieStorage(应用程序cookies池),单例可以优化本地缓存等
3)、@synthesize和@dynamic分别有什么作用?
1、@property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var
2、@synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法
3、@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成
4)、runTime和runLoop
1、runTime:运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。比如id类型、kvc已经selector方法的实现,在编译的时候并不会决定真正调用核心,只有在运行时才决定。原理是用isa指针记录执行。
2、runLoop:运行循环,是事件接受和分发机制的一个实现,是异步的,不能同步。目的是保证程序执行的线程不会被系统终止。当需要和线程进行交互的时候才会使用runLoop,线程和runLoop是一一对应的,以key-value形式保存,runLoop的创建不是线程创建的时候,而是第一次获取的时候,销毁则是线程结束的,当没有事件发生的时候,runLoop会休眠,需要则再次被唤醒。
5)、进程和线程
1、进程:进程是指在系统中正在运行的一个应用程序,进程之间或不干扰,享有资源调配
2、线程:线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。
19.文件夹操作File Manager