美文网首页
2019-01-06

2019-01-06

作者: bianruifeng | 来源:发表于2019-08-08 18:44 被阅读0次

    面向对象的三大特点(封装,继承,多态)
    基于对象 (封装)
    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开发路线简述,

    相关文章

      网友评论

          本文标题:2019-01-06

          本文链接:https://www.haomeiwen.com/subject/ngverqtx.html