委托消息是否有必要始终具有void作为返回类型?
问题描述:
我有一个场景,其中Obj A发送委托消息给Obj B说按下一个按钮。 Obj B根据委托调用采取一些操作。委托消息是否有必要始终具有void作为返回类型?
Obj A想根据调用委托消息后发生的结果在屏幕上显示某些内容。
说Obj乙维护一个计数器,该行为发生了多少次。
因此,当Obj A按下按钮并调用委托方法时,该委托方法返回一个值是不是一个好主意,在我的情况下是当前计数器?
这样Obj A就可以显示计数器的更新值。
在这种情况下,同一个消息既充当Delegate又充当DataSource。
对我来说Obj A是一个View和Obj B是View Controller。
我的执行是否有缺陷?
答
我喜欢你的实现。
即使它不区分委托和数据源角色,它也会以更简单的方式组合它们。
我想尽可能的MVC概念,是落实适当的方式:
A(视图)发送B(委托)的消息说:“我被窃听”或类似的东西。
B(代表)根据需要发挥作用,并向A发送一条消息,指出“reloadData”。
A要求B(作为数据源)显示数据。
因为在你的情况下,委托和数据源是相同的对象,因为它在许多其他情况下发生的,在我看来非常合理的,而不是在所有有缺陷的像你一样实现流程:
- A(视图)向B(代理&数据源)发送消息并接收刷新视图所需的数据信息。
答
不,在许多情况下,它不会返回空值,而是一个值。
这是一个有效和常用的方法..一个例子是UITextView中的委托:
但许多其他组件这样做,所以他们不必太专业,但这样他们就可以仍然是通用的
答
不,它不是一个规则,一个delgate应该返回void。
有很多delegates返回非空值。
- (BOOL)application:(NSApplication *)sender
openFile:(NSString *)filename; // NSApplication
- (BOOL)application:(UIApplication *)application
handleOpenURL:(NSURL *)url; // UIApplicationDelegate
- (UITableRowIndexSet *)tableView:(NSTableView *)tableView
willSelectRows:(UITableRowIndexSet *)selection; // UITableViewDelegate
- (NSRect)windowWillUseStandardFrame:(NSWindow *)window
defaultFrame:(NSRect)newFrame; // NSWindow
代表是绝对没有特别的。它只是一个包含你想访问的函数的类/实例/方法。例如,您可以将盒子的文件系统视为一组代表 - 您可以给他们打电话并执行服务。 – 2013-03-19 11:51:36