一、MAC开发
这一章主要讲的一个概念就是帮助对象,它的职能类似于你的秘书。这个概念对于我来说还是一个新概念,觉得是本章是比较重要并且难理解的一章。
当你想要完成某件件事情时,通知帮助对象,它会帮你准备需要的东西,然后反馈给你。在这些准备工作的基础上,你就可以开始完成你想要的功能了。
具体来说,对于前面提到的例子。helper object在控件和你自己的类之间建立了一种反馈的机制。控件是老板,你创建的类是秘书。
例如当用户想要每次改变windows的size时,windows的宽度都是高度的2倍。为了实现这个功能,设置windows对象的helper object是appcontroller。每当windows被用户改变size时,appcontroller都会设置好宽度和高度的关系,并把这些数据反馈给windows,因此windows就能据此设置自己的size,从而实现宽度是高度2倍的效果。
helper object这个概念一般来说叫做delegate,对于NStablevIEw来说也叫data source。
本章的内容主要是围绕speakline这个程序来进行的,在原来的基础上加入了helper object的实现。
delegate 的实现机制类似于给应用程序预留借口。因为所有的类都继承与NSObject,并且由于指定了NStableVIEw的delegate是appcontroller。这就使得NStableVIEw可以调用appcontroller的函数实现来完成自己相应的处理。
举例如下,NSObject中定义了respondsToSelector函数。它用于询问delegate中是否定义了指定的selector函数。
在NStableVIEw的实现代码中应该有如下的代码:
// About to change to row "rowIndex"// Set the default behavior BOol ok = YES;// Check whether the delegate implements the method if ([delegate respondsToSelector:@selector(tableVIEw:shouldSelectRow:)]) { // Execute the method ok = [delegate tableVIEw:self shouldSelectRow:rowIndex]; } // Use the return value if (ok) { ...actually change the selection... }
以上代码中的delegate实际上指的就是 appController。
challenge 1 :delegate程序
challenge 2 :data source 程序
@H_419_51@
这是第一个有自己参与一点点设计的cocoa程序,完成了之后还是有些开心的。
在基本要求的基础上,实现了table vIEw中cell的可编辑,以及add item之后,输入框清空的小功能。并且使用xcode help中的document找到了NStableVIEw类中的reload函数,实现add之后,table vIEw数据的更新显示。
二、iphone开发
delegate和datasource在cocoa touch中有不同的含义。delegate一般指的是行为,而datasource指的是数据。
例如:在UItableVIEw中numberOfRowsInSection中cellForRowAtIndexPath就是datasource,而dIDSelectRowAtIndexPath就是datasource。
delegate一个很重要的用途,就是它可以在vIEw controller之间传递数据。
整个过程看起来像这样:假设有一个黑帮团伙C1想去偷金库里的金子,但是要想进到金库里面必须先把金库里的门和柜子等打开,C1在内部讨论了几天之后,发现自己内部没有这样的人才,于是决定广发英雄帖(定义@protocal),诚聘开锁英才(在C1的类定义中,加上delegate的定义)。英雄帖的名称叫protocal,在protocal中写明了需要打开的门和锁的规格(在@protocal中定义了open(门,柜子)函数)。几天之后,江湖中人称桥王的Segue在看到这封英雄帖之后,忽然想到在黑帮C2里不是有这样的人么,上次自己家的门就是让这帮人给撬开的(C2的类符合@protocal的要求,有open(门,柜子)的函数实现)。于是,他将C2介绍给了C1(在prepareForSegue函数中,c1.delegate = c2)。
于是第二天,C1跑去抢劫银行时,叫来C2打开了金库的门和柜子(在C1的action函数中,执行[C1.delegate open(门,柜子)])。打开一看,发现里面什么都没有,只发现有一份信。C1急忙拆开信来看,上面写着“出来混,迟早是要还的。。。”。
总结一下就是下面的5个步骤:
1. Create the @protocol
2. Add delegate @property to delegator’s public @interface
3. Use delegate property insIDe delegator’s implementation
4. Set the delegate property somewhere insIDe the delegate’s @implementation
5. Implement the protocol’s method(s) in the delegate (include <> on @interface)
总结以上是内存溢出为你收集整理的第6章 helper object全部内容,希望文章能够帮你解决第6章 helper object所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)