delegate 的理解

delegate 是与subclass 实现扩展的另一种方式。


一个subclass类的行为在其编译时候就确定下来了。

但有些时候,希望一个类的行为在不同情况下(用户交互,不同状态时),是runtime flexibility的。这时候选择delegate更加合适。


例如NSWindow,在某些情况下,希望“关闭-close”能执行不同的处理。(可能是,保存,刷新另一个界面等等)。

代理通常要实现一个Protocol,所以它们能够响应这个“情况”。

但是各个代理应该有自己响应的方式,所以当NSWindow的delegate 被赋值到不同的delegate上时,它就可以有不同的功能,

这就是 runtime 灵活性了。


更多的变化:

· 一个delegate 可以为多个object服务

· 一个delegate可以实现 all, some 或者 none 的protocol接口。

· object在运行时还可以换delegate (但是不能换继承,对吧)


习惯用法:

·为了最大的通用,一般声明为id类型  -(id)delegate. property (assign) 就可以了,不要retain.

(另一个理由是,delegate是nil的话并不影响object 的工作,所以被代理方并不需要持有delegate )

如果delegate 是nil,对象应该以默认的方式执行。


·delegate 的接口方法一般以这些词开头: should,will,did

·

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值