delegate 的理解

来源:互联网 发布:炫舞时代全p源码 编辑:程序博客网 时间:2024/05/04 08:20

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

·

原创粉丝点击