写一个比喻来说明ios delegate,求批评。

2012-03-08 09:43:22 +08:00
 myrual
昨天晚上才觉得自己大概弄懂了。
-----------------------------------------------
有一个律师事务专门做合同审查,但是有个怪癖,从来不接受客户上门咨询。
他们的工作方式更是奇怪,如果你要想收到合同审查的结果,那么你必须有两个邮箱 review_ok 和review_fail,然后交付合同的时候要告诉他们你们的邮箱域名是什么。
否则只收钱干活,不给结果。
一旦他们完成了工作,就会发送 报告到 review_ok@邮箱域名或者review_fail@邮箱域名
比如有个小公司,叫做不挣钱有限责任公司,域名叫做 buzhengqian.com,他们和中石油要做大买卖,然后把合同发给这律师公司,然后告诉律师事务所我们的域名是 buzhengqian.com
然后呢,等啊等啊等啊等啊, 当review_ok@buzhengqian.com收到邮件的时候,表明合同没问题,可以签字了。
可是不挣钱公司还想问问这份合同对于中石油的海外公司是否有效,上律师网站一看,发现只要有一个叫做 oversea的邮箱就行了。
所以还是重复上一个流程,然后呢,oversea@buzhengqian.com和review_ok@buzhengqian.com都收到结果。
不挣钱公司如果还想问问比如这份合同是否要发改委同意才能生效,查查说明, 发现只要有一个 fagaiwei@buzhengqian.com邮箱就行了。
重复流程之后,发现review_fail邮箱收到了一封邮件,提示需要续费。然后发现忘了设置一个邮箱叫做 confirmPayMoreMoney@buzhengqian.com的邮箱来回复 同意两字。
设置好邮箱之后再重复一次,然后呢,多花了公关费100万之后 fagaiwei@buzhengqian.com收到邮件,题目: 没发改委什么事.
4227 次点击
所在节点    iDev
11 条回复
godwarlock
2012-03-08 10:28:22 +08:00
隐喻的我有点儿晕

其实就是一个用来设置回调对象的属性
myrual
2012-03-08 10:46:20 +08:00
@godwarlock 你说的没错,就是一个设置回调对象的属性。
但是对于一个没用过mvc编程模式的人来说有点不容易习惯,我大部分时候是c语言程序员,编程的思维模式一直是控制所有的东西,而不是那种被别人控制的反向编程模式。
其实我很想问一个问题,当在xcode里面按住ctrl把 controller连上view的时候,是不是就是xcode替我把view的delegate属性改成了controller那个类呢?
shinyzhu
2012-03-08 12:57:50 +08:00
@myrual Ctrl+拖动只是创建Outlet或者Action,delegate需要明确选中delegate来拖。
godwarlock
2012-03-08 18:03:22 +08:00
@myrual @shinyzhu 说的没错,xib其实只是一个xml文件而已,苹果对xib进行了一套很完整的封装,载入xib时会按照文件中的属性一一创建和设置对象,不过我现在工作中都是纯代码操作,公司里用xib在合作时merge是个挺麻烦的事
myrual
2012-03-08 21:41:42 +08:00
@godwarlock 刚刚搜索了一下xib git,似乎xib用gitmerge是有一定困难的,似乎没法保证上下文的顺序?
http://stackoverflow.com/questions/5435543/git-xibs-merging
stranbird
2012-03-08 22:23:32 +08:00
为何不用代码来解释?

class A
attr_access :delegate
def onClick
delegate.onClick
end
end

class B
def onClick
puts "I'm inside B"
end
end

a = A.new
b = B.new
a.delegate = b
a.onClick # => "I'm inside B"

这个就是delegate的全景了。
myrual
2012-03-08 22:36:05 +08:00
@stranbird 我还在让自己适应这种设计模式的过程中,虽然明白原理,但是我需要的是那种thinking in objective c and cocoa的感觉,所以想写一些东西来强化一下记忆和理解,也正好找人讨论一下。试图通过这个过程,建立一个相对正确的ios开发逻辑。这样我可以在对某些方面不了解的情况下可以少犯错误。
我觉得虽然说ios开发模式是mvc,但是其实是程序员请求ios展示一个view,然后通过实现view声明的delegate来做很多事情。 view活跃的那段时间其实是ios来控制的,不是程序员。
那么程序员是处于一个被动的地位,ios处于主动地位。不知道这个理解对不对。

另外ruby的程序确实很好懂。
laihj
2012-03-08 23:12:00 +08:00
我觉得delegate本身比楼主的比喻好懂
stranbird
2012-03-08 23:40:35 +08:00
@myrual 我觉得你想多了。
godwarlock
2012-03-09 00:42:12 +08:00
@myrual 项目中的话项目文件和xib都会比较麻烦,项目文件就一个还好说,xib真的要是几个人改起来,感觉merge应该是个很折腾的事情,而且感觉xib对于代码的重复利用也没什么好处
stranbird
2012-03-09 05:05:44 +08:00
@godwarlock 可以写xib模版,用loadNib载入,这样就可以复用了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/29034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX