一、必不可少的开发语言
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了,所以不用担心该技术不能使用。