博客> 2018iOS 它准备好了 你准备好了吗?
2018iOS 它准备好了 你准备好了吗?
2018-08-14 21:19 评论:0 阅读:1376 唐秦风
2018iOS开发你准备好了吗

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,小编的qq群:686183764 不管你是小白还是大牛欢迎入驻 ,分享面试题、面试经验,讨论技术, 大家一起交流学习成长!进群有群主精心整理资料领取!

序言

我相信很多人都在说,iOS行业不好了,iOS现在行情越来越难了,失业的人比找工作的人还要多。失业即相当于转行,跳槽即相当于降低自己的身价。那么做iOS开发的你,你是否在时刻准备着跳槽或者转行了。

深度剖析ios开发行业发展现状及前景

自从iOS诞生以来,苹果对每一代 iOS 的主屏幕图标放置和 iOS 版本图标设计极为用心,可堪称为完美系统。甚至在短短几年时间内就从一个全新的移动操作系统,顺利晋级为全球最炙手可热的操作系统,同时搭载iOS系统的设备更是将苹果公司从濒临破产的边境拉回,并且一跃成为全球市值最高的公司,如此传奇般的故事不仅为人所称道,更造就了一大批依靠iOS成功的人。 W{LCE46HK@K){NYU1@E)2K9.png

iOS的发展及人才需求

自2007年以来,至今只有短短8年的时间,以苹果为代表的iOS系统在短短的8年时间里从移动操作系统晋级称为最炙手可热的信息操作系统,搭载iOS系统设备把苹果公司从一个濒临破产的境地拉回,进而一跃称为全球目前市值最高的科技公司,这则传奇故事为众人称道,更成就了众多依靠iOS获得成功的人。

截止2014年底,据IDC数据统计显示,我国iOS的市场份额高达21.43%,iOS最大的竞争对手Android目前的市场份额达到63.29%,虽然从数字上来看,Android的市场份额领先iOS一大截。但是从另外一个数据分析可知,在2014年全年,iOS的市场份额同比增长了48.27%,iOS一直在Android面前都是扮演的老大哥的角色。从产品发展路线以及定价策略上看,iOS开发行业的前景都是十分可观的。

至如今,随着iOS这为之疯狂的发展,各大iOS学院、各种培训出现在人们视野中,为社会提供源源不断的iOS开发人才,虽市场对于iOS人才的需求因此下降到一定程度,但是,不可否认的是“它们”依旧需要着“我们”!

以下是在各大地区对于iOS开发者的需求占比!占比.png

那么各大公司的职位都准备好了,可是你们准备好了吗?

一.架构师

一个整体的分层? 逻辑清晰? 还是清晰的分工? 对于架构模式来说并没有一个非常明确的定义, 比较抽象, 在于设计在于架构, 不管是小到类与类之间的交互, 还是不同的小模块, 小版块之间, 甚至于在不同的业务之间, 我们都可以去从架构的方面去理解, 去分析。

那么在iOS中常见的架构来说, 常见有就有这些: MVC架构, MVP架构, MVVM架构

当然这些架构都有一个共同特点: 解耦合

1.1 MVC

MVC最早存在于桌面程序中的, M是指业务数据, V是指用户界面, C则是控制器. 在具体的业务场景中, C作为M和V之间的连接, 负责获取输入的业务数据, 然后将处理后的数据输出到界面上做相应展示, 另外, 在数据有所更新时, C还需要及时提交相应更新到界面展示. 在上述过程中, 因为M和V之间是完全隔离的, 所以在业务场景切换时, 通常只需要替换相应的C, 复用已有的M和V便可快速搭建新的业务场景. MVC因其复用性, 大大提高了开发效率, 现已被广泛应用在各端开发中。

传统下的MVC模式。

2582e0a3f849289edb12b7b25c22079d.png

在图里,View并没有任何界限,仅仅是简单的在Controller中呈现出Model的变化。想象一下,就像网页一样,在点击了跳转到某个其他页面的连接之后就会完全的重新加载页面。尽管在iOS平台上实现这这种MVC模式是没有任何难度的,但是它并不会为我们解决架构问题带来任何裨益。因为它本身也是,三个实体间相互都有通信,而且是紧密耦合的。这很显然会大大降低了三者的复用性,而这正是我们不愿意看到的。

MVC一系列的特征:

任务均摊--View和Model确实是分开的,但是View和Controller却是紧密耦合的

可测试性--由于糟糕的分散性,只能对Model进行测试

易用性--与其他几种模式相比最小的代码量。熟悉的人很多,因而即使对于经验不那么丰富的开发者来讲维护起来也较为容易。

如果你不想在架构选择上投入更多精力,那么Cocoa MVC无疑是最好的方案,而且你会发现一些其他维护成本较高的模式对于你所开发的小的应用是一个致命的打击。

然而传统的MVC架构不适用于现在的iOS开发

1.2 MVP

MVC的缺点在于并没有区分业务逻辑和业务展示, 这对单元测试很不友好. MVP针对以上缺点做了优化, 它将业务逻辑和业务展示也做了一层隔离, 对应的就变成了MVCP. M和V功能不变, 原来的C现在只负责布局, 而所有的逻辑全都转移到了P层。

MVP一系列的特征:

任务均摊--我们将最主要的任务划分到Presenter和Model,而View的功能较少(虽然上述例子中Model的任务也并不多)。

可测试性--非常好,由于一个功能简单的View层,所以测试大多数业务逻辑也变得简单

易用性--在我们上边不切实际的简单的例子中,代码量是MVC模式的2倍,但同时MVP的概念却非常清晰

1.3 MVVM

MVVM架构是MV(X)系列最新的一员,因此让我们希望它已经考虑到MV(X)系列中之前已经出现的问题。从理论层面来讲MVVM看起来不错,我们已经非常熟悉View和Model,以及Meditor,在MVVM中它是View Model。

MVVM一系列的特征:

任务均摊 -- 在例子中并不是很清晰,但是事实上,MVVM的View要比MVP中的View承担的责任多。因为前者通过ViewModel的设置绑定来更新状态,而后者只监听Presenter的事件但并不会对自己有什么更新。

可测试性 -- ViewModel不知道关于View的任何事情,这允许我们可以轻易的测试ViewModel。同时View也可以被测试,但是由于属于UIKit的范畴,对他们的测试通常会被忽略。

易用性-- 在我们例子中的代码量和MVP的差不多,但是在实际开发中,我们必须把View中的事件指向Presenter并且手动的来更新View,如果使用绑定的话,MVVM代码量将会小的多。

总结

我们了解了集中架构模式,希望你已经找到了到底是什么在困扰你。毫无疑问通过阅读本篇文章,你已经了解到其实并没有完全的银弹。所以选择架构是一个根据实际情况具体分析利弊的过程。

因此,在同一个应用中包含着多种架构。比如,你开始的时候使用MVC,然后突然意识到一个页面在MVC模式下的变得越来越难以维护,然后就切换到MVVM架构,但是仅仅针对这一个页面。并没有必要对哪些MVC模式下运转良好的页面进行重构,因为二者是可以并存的。

小编创建了自己的iOS研发讨论QQ群686183764,不管是大牛还是新手欢迎大家入驻!小编还精心准备了学习和面试资料!

二.安全攻防

2.1 常用的命令和工具

ps ——显示进程状态,CPU使用率,内存使用情况等 sysctl ——检查设定Kernel配置 netstat ——显示网络连接,路由表,接口状态等 route ——路由修改 renice ——调整程序运行的优先级 ifconfig ——查看网络配置 tcpdump ——截获分析网络数据包 lsof ——列出当前系统打开的文件列表,别忘记一切皆文件,包括网络连接、硬件等 otool ① ——查看程序依赖哪些动态库信息,反编代码段……等等等等 nm ② ——显示符号表 ldid ③ ——签名工具 gdb ——调试工具 patch ——补丁工具 SSH ——远程控制

2.2 数据保护API

文件系统中的文件、keychain中的项,都是加密存储的。当用户解锁设备后,系统通过UDID密钥和用户设定的密码生成一个用于解密的密码密钥,存放在内存中,直到设备再次被锁,开发者可以通过Data Protection API 来设定文件系统中的文件、keychain中的项应该何时被解密。

2.3 iOS应用安全保护

爱加密对大量的案例进行详细分析,针对iOS的技术原理和破解原理,强势推出iOS应用加密技术,分别从本地数据、方法体/方法名、URL编码、程序结构、网络传输数据等几个方面对iOS应用进行全方位的保护,并可以根据iOS应用用户的需求提供定制解决方案,从而实现iOS防破解保护。

三.逆向编程

逆向工程一词,对很多人来说可能很陌生,在android领域,我们经常会听到“反编译某个apk”,那么逆向工程从某种角度讲也包括反编译这项技术,这样一对比,可能我们就更容易理解逆向工程的定义了。

我们引用百度百科对这个词更加精准地解释:

逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。

3.1 逆向工程的作用

安全审查:对于iOS 开发者来说,不仅仅是完成产品的业务功能,尤其对大公司,还需要非常重视安全问题。通过逆向工程,及早发现问题,修改问题,避免发布后到用户手中引起各种舆情问题,损害公司声誉。

分析竞品:1.参考竞品app的架构设计;2.参考竞品app的接口设计;3.关键技术的实现细节。

学术研究:通过逆向,实现学术研究,主要用于学习。

突破app的使用限制:很多app对不同的用户有使用权限的限制,比如收费,或者vip用户才能使用的功能,通过逆向提前获取使用权限,当然不推荐这种方式,建议大家还是支持正版。

识别侵权:主要用于调查竞品或商业产品,识别侵权行为。

3.2 逆向分析的方法

iOS逆向分析的方法主要包括静态和动态两种分析方法。

静态分析顾名思义是在app未运动的情况下,对应用本身的一种分析方法。我们都知道iOS的沙盒机制,沙盒里会存储app的各种信息,包括应用的文件系统结构,比如数据库等;此外,使用一些特殊工具,如反汇编工具对app代码进行查看等,都属于静态分析的范畴。

动态分析是在app运行过程中,通过在线调试,分析应用的文件结构,内存的变化,界面的展示等,同时也可以观察网络数据的请求,通过抓包分析业务的走向,协议的定义等。

两种分析方法在实际的逆向过程中,应当配合使用,比如静态分析获取app的基本信息以及数据存储结构,再通过动态分析的方法进一步深入app内部,研究具体实现和原理,大大提供分析效率。

3.3 逆向分析工具

工欲善其事必先利其器,掌握了方法之后,还要学会使用各种工具,分析app的不同功能。这些工具主要包括以下:

工具分类 工具名称
越狱工具 盘古越狱
UI分析工具 Reveal和PonyDebugger等
文件系统查看工具 iExplorer, iFunbox, iTool等
网络分析工具 WireShark, Charles等
反汇编工具 Hopper, IDA Pro等
调试器 Cycript, gdb等
逆向程序开发工具 Theos
其他 ...

四、iOS进阶

4.1 KVO基本原理

a.kvo是基于runtime机制实现的

b.当某个类的属性对象第一次被观察时,系统就会在运行期动态的创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法,派生类在被重写的setter方法内实现真正的通知机制

c.如果原类为Person,那么生成的派生类名为NSKVONotifying_Person

d.每个类对象中都有一个isa指针指向当前类,当一个类对象的第一次被观察,那么系统会偷偷将isa指针指向动态生成的派生类,从而在给被监控属性赋值时执行的派生类的setter方法

e.键值观察通知依赖于NSObject的两个方法:willChangeValueForKey:和didChangeValueForKey:在一个被观察属性发生改变之前,willChangeValueForKey:会被调用,这就会记录旧的值,而当改变发生后,didChangeValueForKey:会被调用,继而observeValueForKey:ofObject:change:context: 也会被调用。

4.2 weak实现原理

Runtime维护了一个weak表,用于存储指向某个对象的所有weak指针,weak表其实是一个hash(哈希)表,key时所指对象的地址,Value时weak指针的地址(这个地址的值时所指对象的地址)数组。

a.初始化时:runtime会调用objc_initWeak函数,初始化一个新的weak指针只想对象的地址。

b.添加引用时,objc_initWeak函数会调用objc_storeWeak()函数,objc_storeWeak()的作用是更新指针指向,创建对应的弱引用表。

c.释放时,调用clearDeallocating函数,clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。

五、底层开发

iOS 的内核是Darwin,而Darwin是用C,C++写的。 Darwin是由苹果电脑于2000年所释出的一个开放原始码操作系统。Darwin 是MacOSX 操作环境的操作系统成份。苹果电脑于2000年把Darwin 释出给开放原始码社群。现在的Darwin皆可以在苹果电脑的PowerPC 架构和X86 架构下执行,而后者的架构只有有限的驱动程序支援。 Darwin 是一种Unix-like操作系统,整合数种的技术,包含开放原始码的XNU核心,一种以微核心为基础的核心架构来实作Machkernel。操作系统的服务和userland 工具是以4.4BSD(柏克莱软件套件的UNIX),特别是FreeBSD和NetBSD) 为基础类似其他Unix-like 操作系统Darwin 也有对称多处理器的优点,高效能的网络设施和支援多种整合的档案系统。   通常来说,大多数的计算机制造商都把自己的操作系统(以及大多数的应用程序)看作是私人拥有不会公开的。将源代码向外界开发人员免费提供是为了鼓励所有的开发人员都来修正其中的问题,对其进行改善。在Darwin之外,OS X还包括了自己的用户接口所有权,以及其他一些没有提供开源的特性。

六、swift4.0开发

1、ATS配置 2、状态栏全局变亮白 3、懒加载 4、内存泄漏 5、常用的第三方库 6、反射机制 7、运行时 8、MD5加密 9、聊天界面 10、多线程GCD 11、 启动图尺寸大小

因swift4.0内容太长,小编会在后面单独进行介绍的!

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,小编的qq群:686183764 不管你是小白还是大牛欢迎入驻 ,分享面试题、面试经验,讨论技术, 大家一起交流学习成长!进群有群主精心整理资料领取!

收藏
3
sina weixin mail 回到顶部