仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4366|回复: 20
打印 上一主题 下一主题

[学习教程] IOS编程:利用objection来模块化开辟iOS项目仓酷云

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:32:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近一直都在学习有关ios(苹果系统)的知识,而学习ios的最好方法就是研究iPhone和ipad。因为iPhone和iPad的应用程序都是用Objective-C语言来开发的,所以在接触ios之前,我必须有一定的Objective-C基础。objection是一个轻量级的依附注进框架,受Guice的启示,GoogleWallet也是利用的该项目。「依附注进」是面向对象编程的一种计划形式,用来削减代码之间的耦合度。一般基于接口来完成,也就是说不必要new一个对象,而是经由过程相干的把持器来猎取对象。2013年最火的PHP框架laravel就是个中的典范。
假定有以了局景:ViewControllerA.view里有一个button,点击以后push一个ViewControllerB,最复杂的写法相似如许:
  1. -(void)viewDidLoad{[superviewDidLoad];UIButton*button=[UIButtonbuttonWithType:UIButtonTypeSystem];button.frame=CGRectMake(100,100,100,30);[buttonsetTitle:@"Button"forState:UIControlStateNormal];[buttonaddTarget:selfaction:@selector(buttonTapped)forControlEvents:UIControlEventTouchUpInside];[self.viewaddSubview:button];}-(void)buttonTapped{ViewControllerB*vc=[[ViewControllerBalloc]init];[self.navigationControllerpushViewController:vcanimated:YES];}
复制代码
如许写的一个成绩是,ViewControllerA必要importViewControllerB,也就是对ViewControllerB发生了依附。依附的工具越多,保护起来就越贫苦,也简单呈现轮回依附的成绩,而objection恰好能够处置这些成绩。
完成办法是:先界说一个协定(protocol),然后经由过程objection来注册这个协定对应的class,必要的时分,能够猎取该协定对应的object。关于利用方无需体贴究竟利用的是哪一个Class,归正该有的办法、属性都有了(在协定中指定)。如许就往除对某个特定Class的依附。也就是一般所说的「面向接口编程」。
  1. JSObjectionInjector*injector=[JSObjectiondefaultInjector];//[1]UIViewController<ViewControllerAProtocol>*vc=[injectorgetObject:@protocol(ViewControllerAProtocol)];//[2]vc.backgroundColor=[UIColorlightGrayColor];//[3]UINavigationController*nc=[[UINavigationControlleralloc]initWithRootViewController:vc];self.window.rootViewController=nc;
复制代码

  • [1]猎取默许的injector,这个injector已注册过ViewControllerAProtocol了。
  • [2]猎取ViewControllerAProtocol对应的Object。
  • [3]拿到VC后,设置它的某些属性,好比这里的backgroundColor,由于在ViewControllerAProtocol里有界说这个属性,以是不会有warning。
能够看到这里没有援用ViewControllerA。再来看看这个ViewControllerAProtocol是怎样注册到injector中的,这里触及到了Module,对Protocol的注册都是在Module中完成的。Module只需承继JSObjectionModule这个Class便可。
  1. @interfaceViewControllerAModule:JSObjectionModule@end@implementationViewControllerAModule-(void)configure{[selfbindClass:[ViewControllerAclass]toProtocol:@protocol(ViewControllerAProtocol)];}@end
复制代码
绑定操纵是在configure办法里举行的,这个办法在被增加到injector里时会被主动触发。
  1. JSObjectionInjector*injector=[JSObjectiondefaultInjector];//[1]injector=injector?:[JSObjectioncreateInjector];//[2]injector=[injectorwithModule:[[ViewControllerAModulealloc]init]];//[3][JSObjectionsetDefaultInjector:injector];//[4]
复制代码

  • [1]猎取默许的injector
  • [2]假如默许的injector不存在,就新建一个
  • [3]往这个injector里注册我们的Module
  • [4]设置该injector为默许的injector
这段代码能够间接放到+(void)load里实行,如许就能够制止在AppDelegate里import各类Module。

很少去思考,没有去多问几个为什么。这是学习的大忌,我认识到了自己学习方法上的错误。孔子说,学而不思则罔,思而不学则殆。一点也没错,学和思是要结合的,这样才能进步。现在回想一下,我学到了什么?自己也无言以对了。
精灵巫婆 该用户已被删除
21#
 楼主| 发表于 2015-6-15 04:55:00 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
活着的死人 该用户已被删除
20#
发表于 2015-6-13 13:07:31 | 只看该作者
边吃零食边看Stanford的视频教程
再见西城 该用户已被删除
19#
发表于 2015-6-12 19:28:17 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
admin 该用户已被删除
18#
发表于 2015-5-7 01:59:58 | 只看该作者
边吃零食边看Stanford的视频教程
透明 该用户已被删除
17#
发表于 2015-5-5 14:41:29 | 只看该作者
到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了
只想知道 该用户已被删除
16#
发表于 2015-4-20 06:39:30 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
蒙在股里 该用户已被删除
15#
发表于 2015-3-25 11:18:42 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
若相依 该用户已被删除
14#
发表于 2015-3-24 16:34:32 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
小女巫 该用户已被删除
13#
发表于 2015-3-19 20:43:15 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
柔情似水 该用户已被删除
12#
发表于 2015-3-18 08:56:05 | 只看该作者
然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,
简单生活 该用户已被删除
11#
发表于 2015-3-16 20:37:23 | 只看该作者
培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,
小妖女 该用户已被删除
10#
发表于 2015-3-11 20:53:12 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
爱飞 该用户已被删除
9#
发表于 2015-3-10 18:12:06 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
乐观 该用户已被删除
8#
发表于 2015-3-1 13:47:45 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
老尸 该用户已被删除
7#
发表于 2015-2-10 18:20:51 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
金色的骷髅 该用户已被删除
6#
发表于 2015-2-9 08:51:45 | 只看该作者
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
因胸联盟 该用户已被删除
5#
发表于 2015-2-6 01:48:28 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
莫相离 该用户已被删除
地板
发表于 2015-1-29 14:22:32 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
谁可相欹 该用户已被删除
板凳
发表于 2015-1-24 15:38:16 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表