面向对象的三大特点(封装,继承,多态)
基于对象 (封装)
OOA 面向对象的分析(OOA,Object Oriented Analysis)
OOD 面向对象的设计(OOD,Object Oriented Design)
OOP 面向对象的编程实现(OOP,Object Oriented Programming)
幂等
数据缓存,TMCache是线程安全的
AOP面向切面编程
UIView与CALayer的区别
http://www.jianshu.com/p/fd8cd2231541
UIView继承自UIResponder,主要特点是可以响应触摸事件。而CALayer是实际的图层内容管理, 不会直接渲染到屏幕上。大家干的的事情不一样,是两个东西,大家的存在互不影响,理所当然。
机制与策略分离
UIView主要是对显示内容的管理, 而CALayer主要是显示内容的绘制. UIView是CALayer的CALayerDelegate, 在代理方法内部[
UIView(CALayerDelegate) drawLayer:inContext]调用UIView的drawRect方法, 从而绘制出UIView的内容. UIView的显示内容由内部的CALayer:display方法来实现.
编程问题都可以抽离出机制和策略部分。机制一旦实现,就会很少更改,但策略会经常得到优化。CALayer也可以看做是一种机制,提供图层绘制,CALayer的头文件基本上是没怎么变过的,而UIView可以看做是策略,变动很多。越是底层越是机制,越是机制就越是稳定。机制与策略分离,可以使得需要修改的代码更少,特别是底层代码,这样可以提高系统的稳定性。UIView遮蔽了大部分的CALayer接口,抽取构造出更易用的frame和动画实现,这样上手更容易。
2.有扎实的Objective-C/C/C++语言基础,
熟悉Cocoa框架和系统常用组件的原理,
对Objective-C Runtime和Runloop有较深的理解,
具有良好的编码风格和编码习惯,有良好的英文资料阅读能力;
3.熟悉常用设计模式,
常用算法和数据结构,
网络编程(TCP/UDP,HTTP,Socket等)
数据库等;
4.理解Objective-C的内存管理机制(原理)
熟练掌握多线程编程,对复杂UI效果的实现有深入了解,
能够实现复杂的功能和应用整体架构;
5.深入了解各个不同iOS版本的特性与差异,
熟练使用性能分析工具,能独立解决性能调优、代码优化等问题;
7.有丰富的地图的开发经验
蓝牙开发经验者优先。
//RunLoop 和线程
RunLoop 的作用就是来管理线程的,当线程的 RunLoop
开启后,线程就会在执行完任务后,处于休眠状态,随时等待接受新的任务,而不是退出。
//只有主线程的RunLoop是默认开启的,所以程序在开启后,会一直运行,不会退出。其他线程的RunLoop
如果需要开启,就手动开启,
//猜想runloop内部是如何实现的?
1、有一个判断循环的条件,满足条件,就一直循环
2、线程得到唤醒事件被唤醒,事件处理完毕以后,回到睡眠状态,等待下次唤醒
RunLoop 的应用场景
一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。
NSOperation
NSOperationQueue
简单概述下 KVO 的实现:
当你观察一个对象时,一个新的类会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。自然,重写的 setter 方法会负责在调用原 setter 方法之前和之后,通知所有观察对象值的更改。最后把这个对象的 isa 指针 ( isa 指针告诉 Runtime 系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。
一 iOS中都有什么设计模式?
1.代理模式
2.观察者模式
3.MVC模式
4.单例模式
5.策略模式
6.工厂模式
数据存储:
1、SQLite
2、Core Data
3、Realm
4、FMDB
iOS常用加密方式:
1、MD5,SHA(hash) 不可逆加密
2、AES,DES,3DES 对称加密
3、RSA,DSA,ECC 非对称加密
(base64:二进制编码)
添加CoreData框架
导入#import<CoreData/CoreData.h>
贴代码之前需要了解6个对象:
1、NSManagedObjectContext
管理对象,上下文,持久性存储模型对象
2、NSManagedObjectModel
被管理的数据模型,数据结构
3、NSPersistentStoreCoordinator
连接数据库的
4、NSManagedObject
被管理的数据记录
5、NSFetchRequest
数据请求
6、NSEntityDescription
表格实体结构
此外还需要知道.xcdatamodel文件编译后为.momd或者.mom文件
Canvas --高效的 iOS 动画库
如何使用 Canvas ?
1、CocoaPods
platform :ios, '7.0'
pod 'Canvas', '~> 0.1.2'
https://github.com/CanvasPod/Canvas
http://canvaspod.io
https://github.com/lioonline/CanvasDemo
使用SB的时候要继承,使用Code写的那坨感觉也没有方便多少。
感觉Facebook出的Pop库会好看点
Swift有个spring动画库谁用谁知道
2 Obejctive-C语言
Obejctive-C语言通常写作Object-C或者Obj-C,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言,它能够和C、C++混合编程。Obejctive-C是一个编译型的语言,通过GCC编译器把Obejctive-C代码编译成机器指令。关于基本概念可以参考,十分钟让你明白Objective-C的语法(和Java、C++的对比) 。
对于Swift这门新的语言,我暂时还没有去涉及,建议还是学学Obejctive-C。
2.1动态特性
Obejctive-C具备一些动态特性,包括动态类型、动态绑定、动态加载,也就是Obejctive-C在运行时才能知道一些对象的类型以及所调用的方法。
2.2内存管理
Obejctive-C是使用引用计数原则,现在Obejctive-C引入ARC(自动引用计数原则)。引用计数有几个规则,一是谁创建谁释放,通过alloc、new和copy创建对象,然后调用release或者autorelease去释放对象,第二是,除了alloc、new和copy之外创建的对象都是autorelease的,第三谁retain了,谁释放。
2.3 一些语言特性
Obejctive-C首先是只有单一继承,没有多重继承。
属性访问,@property加上@synthesize使用后能够自动生成setter和getter方法。
Category,中文一般叫做类别,他能够为现有的类提供新的方法,他将类的实现分散到多个不同的文件或框架中,创建对私有方法的前向引用,向对象添加非正式协议。
block语法,块,他通常代表小段的自包含的代码片段,因此,他们封装为可以并行执行的工作单元额外有用,还可以用于在集合中进行遍历,或者在其他操作完成时作为回调。块代替传统回调函数的意义有两个:一是他们允许在方法实现的调用中就近写入代码,而且块经常被作为框架中一些方法的参数;二是他们可以访问本地变量。
Obejctive-C中有很多类是以NS开头的,那是Cocoa层里面Foundation框架的类库。
3 iOS开发
3.1 iOS操作系统简介
iOS的系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)。每层都包含很多系统框架,例如著名的UIKit框架就是在Cocoa Touch。
3.2 MVC与常用的设计模式
MVC并不是一种设计模式,它是一种软件架构模式,就是把项目分为Model、View和Controller三层进行管理。
常用的设计模式有代理模式,通过协议和block实现。观察者模式的话体现在了KVO和NSNotification上了。Target-Action模式是Objective-C中非常常见的对象之间方法调用的方式,一般在和UI打交道的时候处理各种GUI上的事件会利用到这种模式,他通常会有一个Target作为消息的接收者。单例模式,使得单例对象在项目中只会创建一次。工厂模式,是一个类族的概念,很符合敏捷软件开发的开放封闭原则。关于各种设计模式,可以看卡奴达摩的专栏。
3.3 Interface Builder和Storyboard
一般写iOS的UI有三种方式。xib,Storyboard以及代码创建。
我之前自学用了一会的xib,之后一直用代码创建,代码更容易区做多语言版本,而且
xib启动需要事件比用代码直接写慢,xib文件比代码建立UI文件也大。
具体对比可以看喵神的博客代码手写,xib和StoryBoard间的博弈
3.4 常用系统框架和第三方库
UIKit是最常用的框架,主要是用来做UI的。包括视图UIButton、UILabel,控制器UIViewController等,还有一些触摸事件、手势等。
QuartzCore、CoreAnimation框架是一些绘图、动画的类库。
第三方库的话,可以查看GitHub上Objective-C的仓库排名,Search · GitHub 。
3.5数据存储
iOS数据存储主要有四种方式。
NSKeyedArchiver,采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议。归档形式保存数据只能一次性归档保存以及一次性解压,只能针对小量谁,而且数据操作笨拙,即如果想改动数据的某一小部分,需要解压整个数据或者归档整个数据。
NSUserDefaults,用来保存应用程序设置和属性。
第三种,Write写入文件。
第四种,相对前两种更为复杂,但也最好用。SQLite,可以自己封装,也可以使用FMDataBase等第三方封装库,还可以使用系统的CoreData。
3.6数据通信
iOS的数据通信有几种方式,应用层的HTTP,以及传输层的封装TCP或者UDP的Socket接口,还有就是蓝牙通讯。
HTTP的网络服务一般可以用post、get或者SOAP等方式请求数据,可以用系统的NSURL也可以用第三方类库(MKNetWorkKit、AFNetWorking),这两种类库都可以做缓存,数据交换的格式一般有JSON和XML。
Socket可以通过C语言的Socket和CoreFoundation框架的CFNetwork实现,也可以用第三方类库AsyncSocket。
蓝牙4.0的话使用的是CoreBluetooth框架。
3.7多线程编程
iOS的多线程有NSThread、NSOperation以及GCD。NSThread比其他两个轻量级,但是需要自己管理线程的生命周期,线程同步。线程同步对数据加锁会有一定的系统开销。NSOperation则不需要关心线程管理,GCD是一个替代NSThread和NSOperation的技术。
3.9其他
iOS的地图是使用MapKit框架,定位用CoreLocation。
iOS有一个云端机制iCloud,iOS还有一个推送机制,可以由服务器推送消息到手机应用程序,iOS还可以做本地化。
iOS有一些内置的传感器可以利用起来编程,比如三轴加速传感器,用来测加速度的,还有陀螺感应器,测角速度,感知移动的。
关于iOS的相机、相册以及音视频都有相应的类库。
4 工具
第一是多人协作的问题,你可以用SVN或者Git,Git是比较流行的,但是大多数的公司还在用SVN;
第二,iOS的数据持久化有很多方案,最高效的就是SQLite,在Mac上有很多SQLite的可视化管理工具,我用的是SQLiteManager。
第三,关于查看模拟器或者真机的沙盒内容,模拟器可以使用SimPholders,真机可以用iFunBox;屏幕取色工具,Sip。
第四,关于抓包工具Charles很多人喜欢用,巧神有很详细的介绍,网络封包分析工具Charles。
第五,另外Xcode也可以安装很多辅助工具,例如,第三方库管理工具CocoaPods,压力测试工具UIAutoMonkey。
第六,Xcode也可以安装很多插件,首先介绍一个插件管理的插件Alcatraz,用它来下载以及管理所有插件,我常用的插件有,格式化Xcode代码的ClangFormat,图片资源提示的KSImageNamed,颜色辅助ColorSense等。
第七,移动开发有一些常用的平台的,比提供社会化分享、统计分析等的友盟,ShareSDK;内测平台FIR.im,蒲公英;云测平台Testin;广告平台Google的AdMob
5 书籍 网站推荐
Code4App,
iOS开发社区 – 开源中国社区,
CocoaChina是国内常用的三大代码库网站,
国外有,技术问答StackOverflow,
代码库CocoaControls,
版本控制的网站GitHub,
Aufree/trip-to-iOS · GitHub(资料最全) ,
iOS资源 – Code4App.com ,
iOS开发60分钟入门 ,
iOS开发从新手到上架,
iOS开发路线简述,
网友评论