第6章 helper object

第6章 helper object,第1张

概述一、MAC开发         这一章主要讲的一个概念就是帮助对象,它的职能类似于你的秘书。这个概念对于我来说还是一个新概念,觉得是本章是比较重要并且难理解的一章。        当你想要完成某件件事情时,通知帮助对象,它会帮你准备需要的东西,然后反馈给你。在这些准备工作的基础上,你就可以开始完成你想要的功能了。        具体来说,对于前面提到的例子。helper object在控件和你自己

一、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开发

        delegatedatasourcecocoa touch中有不同的含义。delegate一般指的是行为,而datasource指的是数据。

例如:在UItableVIEwnumberOfRowsInSectioncellForRowAtIndexPath就是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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存