【面试题】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上有许多优秀的开源项目,在真正的开发过程中,某些著名的开源库大家也都广泛的使用着。如:

AFNetworking

SDWebImage

MJRefresh

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.第三方库

AFNetworking

SDWebImage

MJRefresh

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

原文地址:https://www.cnblogs.com/wangbinios/p/6381635.html