写一个比喻来说明ios delegate,求批评。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
myrual
V2EX    iDev

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

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

    其实就是一个用来设置回调对象的属性
    myrual
        2
    myrual  
    OP
       2012-03-08 10:46:20 +08:00
    @godwarlock 你说的没错,就是一个设置回调对象的属性。
    但是对于一个没用过mvc编程模式的人来说有点不容易习惯,我大部分时候是c语言程序员,编程的思维模式一直是控制所有的东西,而不是那种被别人控制的反向编程模式。
    其实我很想问一个问题,当在xcode里面按住ctrl把 controller连上view的时候,是不是就是xcode替我把view的delegate属性改成了controller那个类呢?
    shinyzhu
        3
    shinyzhu  
       2012-03-08 12:57:50 +08:00
    @myrual Ctrl+拖动只是创建Outlet或者Action,delegate需要明确选中delegate来拖。
    godwarlock
        4
    godwarlock  
       2012-03-08 18:03:22 +08:00
    @myrual @shinyzhu 说的没错,xib其实只是一个xml文件而已,苹果对xib进行了一套很完整的封装,载入xib时会按照文件中的属性一一创建和设置对象,不过我现在工作中都是纯代码操作,公司里用xib在合作时merge是个挺麻烦的事
    myrual
        5
    myrual  
    OP
       2012-03-08 21:41:42 +08:00
    @godwarlock 刚刚搜索了一下xib git,似乎xib用gitmerge是有一定困难的,似乎没法保证上下文的顺序?
    http://stackoverflow.com/questions/5435543/git-xibs-merging
    stranbird
        6
    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
        7
    myrual  
    OP
       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
        8
    laihj  
       2012-03-08 23:12:00 +08:00
    我觉得delegate本身比楼主的比喻好懂
    stranbird
        9
    stranbird  
       2012-03-08 23:40:35 +08:00
    @myrual 我觉得你想多了。
    godwarlock
        10
    godwarlock  
       2012-03-09 00:42:12 +08:00
    @myrual 项目中的话项目文件和xib都会比较麻烦,项目文件就一个还好说,xib真的要是几个人改起来,感觉merge应该是个很折腾的事情,而且感觉xib对于代码的重复利用也没什么好处
    stranbird
        11
    stranbird  
       2012-03-09 05:05:44 +08:00
    @godwarlock 可以写xib模版,用loadNib载入,这样就可以复用了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3684 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:53 PVG 08:53 LAX 16:53 JFK 19:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86