成都网站建设设计

将想法与焦点和您一起共享

ios开发范例实战宝典,ios程序设计及实践

iOS 开发中的 MVVM 模式——实用进阶篇(整理)

这篇文章主要介绍了实际应用 MVVM 的过程中的一些问题和解决方案

成都创新互联专注于企业成都营销网站建设、网站重做改版、阜城网站定制设计、自适应品牌网站建设、H5响应式网站商城系统网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为阜城等各大城市提供网站开发制作服务。

MVVM(Model View ViewModel)是一种 MVC(Model View Controller)的一种变型,来解决 MVC 中庞大复杂的 Controller 难以维护的问题。大致上讲 MVVM 有几个要求:

MVVM 和 MVC 有很多类似的特点,主要的不同有:

另外一点,MVVM 默认 View 和 View Controller 有一个一对一的关系,一般我们把这两个看做一个整体,会以 .swift 文件 和 Storyboard 的形式出现。

View Model 的工作是处理所有的展示数据的逻辑。如果一个 model 中有一个 NSDate 对象, NSDateFormatter 就会在 View Model 中用来设置日期的展示形式。

View Model 不能接触任何用户界面的部分,View Model 文件中不应该 import UIKit ,View Controller 会观察 View Model 去了解什么时候显示新的数据(通过 KVO 或者 FRP(Functional Reactive Programming))

MVVM 和 MVC 有一个共同的弱点:没有清楚的定义应该把网络请求部分放在哪里。在实际操作过程中,我会把网络请求放在 View Model 文件里面,但之后我打算把网络请求放在自己独立的一个类中,View Model 文件会拥有这个对象。

下面我们主要谈一谈实际应用 MVVM 过程中一些挑战:

例如你想构造这样一个常用的界面,有一个 segment control 在屏幕顶部,屏幕的其他部分是一个 collection view,选择不同的 segment,就会展示不同样式的 collection view,元素的排列顺序。我们定义了一个 enum 来枚举所有的排列样式:

那么这个 enum 在 MVVM 模式中应该放在哪里呢?因为这个 enum 决定了数据排列的顺序,每个 cell 中的文字和按钮的 title,这些都属于展示的逻辑,所以这个 enum 看起来应该放在 view model 中。

然而,这些 layout 并不改变要展示的数据,只是决定了要呈现的数据的排列方式和排列顺序,从这个角度上来说 enum 又应该放在 view controller 中。

我的解决方法是把 enum 放在 view model 中,然后在 view model 中加一个对外的 Observable 或者 Signal 来表示使用了哪个 layout,基于用户选择的 segment,view model 更新这个值,然后在 view controller 中根据相应的 layout 改变 collection view 的样式,view controller 也可以根据这个值来决定用哪个 cell reuse identifier

iOS 开发者在用 MVVM 和 FRP 写应用的时候最常见的问题可能就是 ViewModel 怎么把数据展现给 ViewController。当 Model 层的数据发生变化更新的时候,ViewController 需要得到通知然后做出相应的 UI 更新,我们一般会用到两种机制:

第一个选项很吸引人,因为可以在 View Controller 中决定怎么选择观察那些 property。然而,我不推荐在 Swift 中使用第一个选项,因为 Swift 在 KVO 中没有类型检查,你需要对 AnyObject 强制转换类型很多次。

第二个选项是比较 Swift 的方式,基于 Swift 的 generics 特性,signals,sequences,observables 可以支持编译过程中的类型检查。

但有时候在 view model 增加这些 Signals 或者 Observables 有些困难。Swift 的初始化方法对于什么时候对 property 赋值有非常明确的规定。Signals 或者 Observables 需要使用 view model 内部的状态,所以它们必须在 super.init() 之后才能创建,但是另一方面,我们在调用 super.init() 之前保证所有 property 已经被赋值了,包括那些 Signal/Observable property。

这是个先有鸡还是先有蛋的问题。

我采用比较简单的解决方法:定义成 var 的隐式可选类型,这样就可以在 super.init() 之后才给 property 赋值。这不是一个完美的解决办法。我们可以用 lazy var property 的闭包赋值来代替上面的方法。在 Swift 不断完善和更新的过程中,大家也可以探索其他更好的办法。

举一个很常用的例子,用户点击 collection view 中的一个 cell,跳转到详情页面。用户点击的操作应该在 view controller 中处理,具体内容是展现一个新的详情页面。但是 view controller 不能直接接触 models,我们要如何用 MVVM 模式实现这样的用户交互呢?

我的解决方案是利用 Swift 的闭包。首先在 view model 中定义一个闭包:

然后在 view model 中添加一个 property:

接着我需要调用闭包,在 view model 中定义一个view controller 可以调用的函数,这个函数的参数是可以决定使用什么数据,一般情况下常用 index path:

现在当用户选中一个 cell,会调用 view model 中的这个函数,并且传入 index path 参数,view model 决定使用哪个数据,并调用在 view controller 中定义的闭包,例如:

最后一个问题是怎么创建这个 view model。我们需要传递一个闭包给view model 的初始化函数,然后用 lazy loading 来调用 view model 的初始化函数。

如何学习ios应用开发

作者:匿名用户

链接:

另一本是Big Nerd Ranch出的《Objective-C编程(第2版)》。(推荐华中师大出的版本)

img src="" data-rawwidth="333" data-rawheight="413" class="content_image" width="333"

——————————————————————

2、视频教程的话,只推荐我赢职场出的iOS移动开发课程。

教程链接如下:

iOS9实战开发教程

img src="" data-rawwidth="398" data-rawheight="202" class="content_image" width="398"

讲的细致是这门课程最大的特点。因此,这款教程尤其适合那些零基础学习iOS的学员。我赢职场知名度不够,但是做的课程不错,可惜没人听说过这个品牌。这款教程是从Objc一直讲到iOS高编。所以跟着这款教程走,iOS开发基本也可以学的差不多。

——————————————————————

二、其次,你要学习API,了解iOS UI控件

Objc阶段的学习只是带你入门,如果你想进阶,API和UI控件是必须需要学的。一门语言可能会有成千上百的API和UI控件。你不需要把他们全都记住,只需要记住一些常用的即可。

例如:Objc中的UITableView的dataSouce和delegate;NSDictionary、NSArray相关的增删查改方法;JSON数组转换方法;文件操作方法等。

UI控件的话,常用的有UIView、UITableView、UIScrollView、UIButton、UILable等。你要熟悉这些控件的属性和相关的操作方法。

记忆这些东西,只靠死记硬背是不行的。多去写代码,多去实践,这样才能逐渐掌握。

学完这个阶段,基本上就可以做出来一个简单的APP了。由于没有进一步学习高深的东西,咱们暂且不说流畅性和内存。

UI控件部分的知识点如图:

img src="" data-rawwidth="607" data-rawheight="531" class="origin_image zh-lightbox-thumb" width="607" data-original=""

——————————————————————

三、最后,你还需要了解iOS开发的底层原理。

能学到这一部分已经很不错了。所谓专业的iOS开发工程师和一个业余的iOS开发爱好者基本也差在这最后一步了。这一部分的知识点也是在面试的时会经常问道的。如果你想找一份iOS开发工程师的职位,这一部分是非学不可的。

这一部分的需要掌握的知识点包括:

iOS内存管理、iOS运行时机制、RunLoop、多线程等

每一块都需要掌握的很详细。

你还要熟练使用类库并阅读类库源码,例如AFNetWorking、SDWeblmage等,这两个是初学者必看的。

——————————————————————

这一阶段的学习可以多去github上下载源代码去阅读。

推荐一些完整的源码下载:

1、懒人笔记iOS客户端

GitHub - liaojinxing/Voice2Note: Voice2Note iOS client source codes.

2、《猿已阅》码农周刊iOS客户端

GitHub - icepy/manong-reading: 《猿已阅》码农周刊 iOS App(放弃维护,推荐大家下载《开发者头条》App)

3、火狐浏览器iOS客户端

GitHub - mozilla/firefox-ios: Firefox for iOS

4、某位大神做的高仿网易新闻项目源码

GitHub - dsxNiubility/SXNews: High imitation Neteasy News. (include list,detail,photoset,weather,feedback)

5、维基百科iOS客户端

GitHub - wikimedia/wikipedia-ios: The official Wikipedia iOS app.

6、品趣iOS客户端

GitHub - ltebean/novel-design: PinQu ios client

7、YoCelsius——一款天气预报的应用

GitHub - YouXianMing/YoCelsius: A weather app that uses animation to give you an at-a-glance look at the weather.

8、密记iOS版——款简单的笔记应用

GitHub - iHTCboy/SecurityNote: 密记iOS版:本应用主要功能是简单笔记。【已经开源,AppStroe可下载】The application of the main function is a simple notes.

——————————————————————

四、关于swift语言的学习。

学习iOS开发分为Objc和swift两个路线,以上介绍的是最经典的Objc路线。如果你想靠学习iOS开发找到一份工作,就要选择从Objc开始学起。因为绝大多数公司都是以Objc为开发语言的。

然而swift作为一门现代语言,集合了很多编程语言的优点,并且比Objc也更加简单易学,近几年swift语言的发展势头十分不错,大有取代Objc而代之的迹象。所以在这里建议题主把两个语言都学习一下。并且Swift语言是在Objc的基础上发明的,学完Objc,再学习swift也会更加容易。

关于swift路线的学习,可以看看我赢职场的iOS开发教程,有大篇幅的章节去介绍swift语言,并且讲得细致入微,十分适合新手学习。

教程链接:iOS9实战移动开发(swift加强版)

img src="" data-rawwidth="860" data-rawheight="589" class="origin_image zh-lightbox-thumb" width="860" data-original=""

五、下面把自己多年来私藏的一些学习iOS开发的网站推荐给大家。当然这只是部分,赞数过百还会把这些资料再放出来一部分。所以,你们快点赞吧!

——————————————————————

iOS开发相关的网站:

1、我赢职场

上文已经介绍过了,他们家的课程质量算是很赞的了,教程最大的特点是特别适合新手学习。

2、tutsplus

不定时更新一些 iOS 教程

3、WWDC

苹果官方每年一度的 WWDC 视频, 可以了解历年有关 iOS 发布的内容。

4、asciiwwdc

WWDC 的文字版

5、Swift by Robin Eggenkamp

该网站收集了很多关于 Swift 的学习资料, 新闻。

——————————————————————

邮件订阅:

1、iOS Dev Weekly

每周一期,内容多为这一星期里值得关注的 GitHub 项目、文章、工具等。

2、iOS Design Weekly

每周一期,会提供一些iOS开发的建议,新闻资讯以及创意方面的内容。

《黑客攻防技术宝典iOS实战篇》pdf下载在线阅读,求百度网盘云资源

《黑客攻防技术宝典》([美]Charlie Miller)电子书网盘下载免费在线阅读

资源链接:

链接:

提取码:vwga  

书名:黑客攻防技术宝典

作者:[美]Charlie Miller

译者:傅尔也

出版社:人民邮电出版社

出版年份:2013-9

页数:320

内容简介:安全始终是计算机和互联网领域最重要的话题。进入移动互联网时代,移动平台和设备的安全问题更加突出。iOS系统凭借其在移动市场的占有率拥有着举足轻重的地位。虽然iOS系统向来以安全著称,但由其自身漏洞而引发的威胁同样一直存在。

《黑客攻防技术宝典:iOS实战篇》由美国国家安全局全球网络漏洞攻击分析师、连续4年Pwn2Own黑客竞赛大奖得主Charlie Miller领衔,6位业内顶级专家合力打造,全面深入介绍了iOS的工作原理、安全架构、安全风险,揭秘了iOS越狱工作原理,探讨了加密、代码签名、内存保护、沙盒机制、iPhone模糊测试、漏洞攻击程序、ROP有效载荷、基带攻击等内容,为深入理解和保护iOS设备提供了足够的知识与工具,是学习iOS设备工作原理、理解越狱和破解、开展iOS漏洞研究的重量级专著。

本书作为国内第一本全面介绍iOS漏洞及攻防的专著,作者阵容空前豪华,内容权威性毋庸置疑。Charlie Miller曾在美国国家安全局担任全球网络漏洞攻击分析师5年,并连续4届摘得Pwn2Own黑客竞赛桂冠。Dionysus Blazakis擅长漏洞攻击缓解技术,2010年赢得了Pwnie Award最具创新研究奖。Dino Dai Zovi是Trail of Bits联合创始人和首席技术官,有十余年信息安全领域从业经验,出版过两部信息安全专著。Vincenzo Iozzo现任BlackHat和Shakacon安全会议评审委员会委员,因2010年和2011年连续两届获得Pwn2Own比赛大奖在信息安全领域名声大振。Stefan Esser是业界知名的PHP安全问题专家,是从原厂XBOX的硬盘上直接引导Linux成功的第一人。Ralf-Philipp Weinmann作为德国达姆施塔特工业大学密码学博士、卢森堡大学博士后研究员,对密码学、移动设备安全等都有深入研究。

本书适合想了解iOS设备工作原理的人,适合对越狱和破解感兴趣的人,适合关注iOS应用及数据安全的开发人员,适合公司技术管理人员(他们需要了解如何保障iOS设备安全),还适合从事iOS漏洞研究的安全研究人员。

作者简介:Charlie Miller

Accuvant Labs首席研究顾问,曾在美国国家安全局担任全球网络漏洞攻击分析师5年,连续4年赢得CanSecWest Pwn2Own黑客大赛。他发现了iPhone与G1安卓手机第一个公开的远程漏洞,通过短信对iPhone进行漏洞攻击并发现了可以让恶意软件进入iOS的代码签名机制缺陷。作为圣母大学博士的他还与人合著了The Mac Hacker's Handbook和Fuzzing for Software Security Testing and Quality Assurance两本信息安全类图书。

Dionysus Blazakis

程序员和安全研究人员,擅长漏洞攻击缓解技术,经常在安全会议上发表有关漏洞攻击缓解技术、绕过缓解技术和寻找漏洞的新方法等主题演讲,因利用即时编译器绕过数据执行保护的技术赢得了2010年Pwnie Award最具创新研究奖。另外,他与Charlie Miller为参加2011年Pwn2Own大赛开发的iOS漏洞攻击程序赢得了iPhone漏洞攻击比赛的大奖。

Dino Dai Zovi

Trail of Bits联合创始人和首席技术官,有十余年信息安全领域从业经验,

做过红队(red teaming,又称“伦理黑客”)、渗透测试、软件安全、信息安全管理和网络安全研究与开发等多种工作。Dino是信息安全会议的常客,在DEFCON、BlackHat和CanSecWest等世界知名的信息安全会议上发表过对内存损坏利用技术、802.11无线客户端攻击和英特尔VT-x虚拟化rootkit程序等课题的独立研究成果。他还是The Mac Hacker's Handbook和The Art of Software Security Testing的合著者。

Vincenzo Iozzo

Tiqad srl安全研究人员,BlackHat和Shakacon安全会议评审委员会成员,常在BlackHat和CanSecWest等信息安全会议上发表演讲。他与人合作为BlackBerryOS和iPhoneOS编写了漏洞攻击程序,因2010年和2011年连续两届获得Pwn2Own比赛大奖在信息安全领域名声大振。

Stefan Esser

因在PHP安全方面的造诣为人熟知,2002年成为PHP核心开发者以来主要关注PHP和PHP应用程序漏洞的研究,早期发表过很多关于CVS、Samba、OpenBSD或Internet Explorer等软件中漏洞的报告。2003年他利用了XBOX字体加载器中存在的缓冲区溢出漏洞,成为从原厂XBOX的硬盘上直接引导Linux成功的第一人;2004年成立Hardened-PHP项目,旨在开发更安全的PHP,也就是Hardened-PHP(2006年融入Suhosin PHP安全系统);2007年与人合办德国Web应用开发公司SektionEins GmbH并负责研发工作;2010年起积极研究iOS安全问题,并在2011年提供了一个用于越狱的漏洞攻击程序(曾在苹果多次更新后幸存下来)。

Ralf-Philipp Weinmann

德国达姆施塔特工业大学密码学博士、卢森堡大学博士后研究员。他在信息安全方面的研究方向众多,涉及密码学、移动设备安全等很多主题。让他声名远播的事迹包括参与让WEP破解剧烈提速的项目、分析苹果的FileVault加密、擅长逆向工程技术、攻破DECT中的专属加密算法,以及成功通过智能手机的Web浏览器(Pwn2Own)和GSM协议栈进行渗透攻击。


分享名称:ios开发范例实战宝典,ios程序设计及实践
URL链接:http://chengdu.cdxwcx.cn/article/dsddghd.html