IOS设计ReactiveCocoa - iOS开辟的新框架仓酷云
视图是仪表盘模型是发动机控制器是控制芯片CoreData---管理数据OBJC刚学的时候觉得CD很高深其实他是最容易用的库之一甚么是ReactiveCocoa
ReactiveCocoa(其简称为RAC)是由Github开源的一个使用于iOS和OSX开辟的新框架。RAC具有函数式编程和呼应式编程的特征。它次要吸收了.Net的ReactiveExtensions的计划和完成。
ReactiveCocoa试图办理甚么成绩
经由一段工夫的研讨,我以为ReactiveCocoa试图办理以下3个成绩:
[*]传统iOS开辟过程当中,形态和形态之间依附过量的成绩
[*]传统MVC架构的成绩:Controller对照庞大,可测试性差
[*]供应一致的动静传送机制
传统iOS开辟过程当中,形态和形态之间依附过量的成绩
我们在开辟iOS使用时,一个界面元素的形态极可能受多个别的界面元素或背景形态的影响。
比方,在用户帐户的登录界面,一般会有2个输出框(分离输出帐号和暗码)和一个登录按钮。假如我们要到场一个限定前提:当用户输出完帐号和暗码,而且登录的收集哀求还未收回时,断定按钮才能够点击。一般情形下,我们必要监听这两个输出框的形态变更和登录的收集哀求形态,然后修正另外一个控件的enabled形态。
传统的写法以下(该示例代码修正自ReactiveCocoa官网):
12345678910111213141516171819202122232425262728293031staticvoid*ObservationContext=&ObservationContext;-(void)viewDidLoad{;;;;}-(void)updateLogInButton{BOOLtextFieldsNonEmpty=self.usernameTextField.text.length>0&&self.passwordTextField.text.length>0;BOOLreadyToLogIn=!LoginManager.sharedManager.isLoggingIn&&!self.loggedIn;self.logInButton.enabled=textFieldsNonEmpty&&readyToLogIn;}-(void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary*)changecontext:(void*)context{if(context==ObservationContext){;}else{;}}RAC经由过程引进旌旗灯号(Signal)的观点,来取代传统iOS开辟中关于控件形态变更反省的代办署理(delegate)形式或target-action形式。由于RAC的旌旗灯号是能够组合(combine)的,以是能够轻松地机关出另外一个新的旌旗灯号出来,然后将按钮的enabled形态与新的旌旗灯号绑定。以下所示:
123456789RAC(self.logInButton,enabled)=reduce:^(NSString*username,NSString*password,NSNumber*loggingIn,NSNumber*loggedIn){return@(username.length>0&&password.length>0&&!loggingIn.boolValue&&!loggedIn.boolValue);}];能够看到,在引进RAC以后,之前散落在action-target或KVO的回调函数中的判别逻辑被一致到了一同,从而使得登录按钮的enabled形态被加倍明晰地表达了出来。
除组合(combine)以外,RAC的旌旗灯号还撑持链式(chaining)和过滤(filter),以便利将旌旗灯号举行进一步处置。
试图办理MVC框架的成绩
关于传统的Model-View-Controller的框架,Controller很简单变得对照复杂和庞大。因为Controller承当了Model和View之间的桥梁感化,以是Controller经常与对应的View和Model的耦合度十分高,这同时也形成对其做单位测试十分不简单,对iOS工程的单位测试年夜多都只在一些工具类或与界面有关的逻辑类中举行。
RAC的旌旗灯号机制很简单将某一个Model变量的变更与界面联系关系,以是十分简单使用Model-View-ViewModel框架。经由过程引进ViewModel层,然后用RAC将ViewModel与View联系关系,View层的变更能够间接呼应ViewModel层的变更,这使得Controller变得加倍复杂,因为View不再与Model绑定,也增添了View的可重用性。
由于引进了ViewModel层,以是单位测试能够在ViewModel层举行,iOS工程的可测试性也年夜年夜加强了。InfoQ也曾撰文先容过MVVM:《MVVM启发录》。
一致动静传送机制
iOS开辟中有着各类动静传送机制,包含KVO、Notification、delegation、block和target-action体例。各类动静传送机制使得开辟者在做详细选择时感应狐疑,比方在objc.io上就有专门撰文(破船的翻译),先容各类动静传送机制之间的差别性。
RAC将传统的UI控件事务举行了封装,使得以上各类动静传送机制都能够用RAC来完成。示例代码以下:
123456789101112131415161718192021222324//KVO;//target-actionself.button.rac_command=[initWithSignalBlock:^RACSignal*(idinput){NSLog(@"按钮被点击");return;}];//Notification[[rac_addObserverForName:UIKeyboardDidChangeFrameNotificationobject:nil]subscribeNext:^(idx){NSLog(@"键盘Frame改动");}];//Delegate[subscribeNext:^(idx){debugLog(@"viewWillAppear办法被挪用%@",x);}];RAC的RACSignal类也供应了createSignal办法来让用户创立自界说的旌旗灯号,以下代码创立了一个下载指定网站内容的旌旗灯号。
12345678910111213141516171819-(RACSignal*)urlResults{returnencoding:NSUTF8StringEncodingerror:&error];NSLog(@"download");if(!result){;}else{;;}return;}];}怎样利用ReactiveCocoa
ReactiveCocoa能够在iOS和OSX的使用开辟中利用,关于iOS开辟者,能够将RAC源码下载编译后,利用编译好的libReactiveCocoa-iOS.a文件。
开辟者也能够用CocoaPods来设置方针工程对ReactiveCocoa的依附,只必要编纂Podfile文件,增添以下内容便可:
管理所有设备发生的事件比如屏幕旋转屏幕关闭或者一些其他的程序的控制逻辑也应该写在这里他的初始化函数是-(id)initWithNibName:(NSString*)nibNamebundle:(NSBundle*)nibBundle后面那个NibName是InterfaceBuilder里设计的界面现在IB已经集成到XCode里了 最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。 有办法利用自己手头的电脑立刻开始这个美妙旅程的。 培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。 每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。 其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。 到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了 要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。 众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。 同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。 我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。 down下code4app网站的每个分类的代码挨着看 我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。 众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。 这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。 因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。 我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。 边吃零食边看Stanford的视频教程 有办法利用自己手头的电脑立刻开始这个美妙旅程的。 首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
页:
[1]