您的位置:首页 > 移动开发 > IOS开发

iOS知识体系

2016-08-22 14:04 459 查看
一、必不可少的开发语言

1)“C”(基础)

2)“Object-C”(主流)

3)“Swift”(未来)

二、开发工具:Xcode

1)一些真能提高开发效率的快捷键:

1、清除工程:Command + Shift + K

2、整理代码:Control + I

3、运行APP:Command + R

4、快速打开:Command + Shift + O

5、快速搜索:Command + Shift + F

6、切换头文件和m.文件:Command + control + 上下箭头

2)不能错过的一些Xcode插件:

1、代码注释生成器:VVDocumenter

2、CocoaPods插件,省去那些命令行了:CocoaPods for Xcode

3、imageName提示并且自动补全:KSImageNamed-Xcode

4、一个用来对齐常规代码的Xcode插件:XAlign

三、从创建一个项目开始

1)使用workspace管理多个项目:

1、打开方式:File + New + WorkSpace

2)使用不同的项目模板:

1、Page-Based Application

2、Master-Detail Application

3、Single View Application(一般是这个)

4、Tabbed Application

四、来聊聊项目架构

1)了解MVC,用MVVM分层开发:

1、MVC:即Model - View - Controller,因为大量的逻辑在controller里,显得臃肿。

2、MVVM:MVC的加强版,即Model - View - View Model,Model是数据对象,View只做视 图显示,Controller是连接器,而View Model则是处理处理数据和视图的逻辑,MVVM的好处是使得Controller很轻量,不臃肿。

2)Group分组请用物理目录创建:

1、直接 create group只是虚拟路径,Show in Finder以后会发现所有类全在第一级目录下,显然这不是我们所要的,因此,要先 Show in Finder,新建文件夹之后再copy到工程中,这样就保证项目路径是物理路径。

3)使用CocoaPods管理项目中第三方类库

1、点击CocoaPods的安装和使用

2、Assets.xcassets管理项目中的AppIcon、LaunchImage以及图片资源

4)使用PCH文件

1、苹果不推荐使用:Xcode6以后默认去掉了,原因是pch文件使编译时间过长,影响用户体验。如果使用,要注意配置路径$(SRCROOT)/PchText/pch

2、替代方案:只能建一个header,然后需要就import。

五、info.plist文件

1)、Bundle versions string,short和Bundle Version的区别: Bundle Version String是正式的,跟itunes上的版本号一致,Bundle Version 可用作内部版本时使用,当Bundle Version String缺省时,Bundle Version替代Bundle Version String的功能,同时也继承他的限制(比如格式,位数等),需与itunes上的版本号保持一致

2)、Bundle display name和Bundle name的区别:前者是程序安装后在用户屏幕上显示的名称,后者是程序在用户设备上APP文件夹名称

3)、Executaule file:程序安装包的名称

4)、Localization native development region:软件默认语言,en是英文,China是中文等

5)、Application requires iPhone environment:如果应用程序不能在ipod touch上运行,设置此项为YES,否则为NO

6)、Application uses Wi-Fi:如果应用程序需要wi-fi才能工作,应该将此属性设置为true。这么做会提示用户,如果没有打开wi-fi的话,打开wi-fi。为了节省 电力,iphone会在30分钟后自动关闭应用程序中的任何wi-fi。设置这一个属性可以防止这种情况的发生,并且保持连接处于活动状态

六、如果项目中支持多语言呢?

1)、点击iOS多语言开发

七、用storyboard或者xib来进行UI布局

1)、虽然苹果推荐使用,一些简单的静态界面可以通过storyboard或者xib进行UI布局,但对于多人协作和复杂的界面变换还是比较吃力的。这个看具体情况,然后选择合适的方式。具体教程可以点击storyboard开发教程

八、Category应该与业务无关

1)、类别Category和扩展Extension的区别:Category可以增加类的额外方法,一般不能增加类的属性(在runtime下可以),而Extension可以增加额外方法和属性,但其中的方法一定要在@implementation内实现,否则编译报错。

2)、常用的Category,或者一些使用的Category

九、开发技能Get

1)选择继承还是自定制对象方法

1、继承的优缺点:优点是避免了重复的代码,缺点是耦合性太强,可读性不强

2、因此,如果是与几个类本事有关的用继承,独立的用对象封装

2)网络请求

1、HTTP(HTTPS)、TCP、UDP协议的区别

2、同异步的GET和POST请求

3、AFNetworking封装的网络请求

3)设计模式

1、创建型:单例设计模式、抽象工厂设计模式

2、结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式

3、行为型:责任链设计模式、观察者设计模式,备忘录设计模式、命令设计模式

4)本地数据缓存

1、写入plist文件;

2、使用系统类NSUserdefault;

3、归档;

4、使用系统数据库coreData;

5、使用FMDB数据库。

5)推送

1、点击推送开发的一般流程

2、接入极光、友盟、信鸽、百度等第三方推送服务

十、发布

1、准备好证书和素材

2、点击iOS上架的一般流程

十一、补充

1)使用svn、git或者第三方项目管理工具

1、svn工具:Cornerstone.app和Versions.app,也可以使用Mac自带的,看看教程吧

2、git工具:SourceTree

十二、面试相关(除了会还得会说)

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、线程:线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。

6)、多线程

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了,所以不用担心该技术不能使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息