我刚刚在学习iPhone应用程序开发,但我很难理解代表实际意义何在?任何人都可以用例子告诉我它做了什么以及它有多重要?感谢您的帮助!委托人在xcode ios项目中做了些什么?
回答
从概念上理解这是一个关键的概念,因此在技术细节之前让你的头脑如何思考它是非常重要的。简而言之,委托是回调。
两个主要场景使用委托:
- 类或控制要抽象出如何做工作的细节(如检索数据)。
- 允许他人将代码挂钩到管道中。
示例: UITableView - 表视图只是一个知道如何呈现单元格列表的控件。它处理渲染,滚动等所有繁重的工作......但是,它不知道如何加载数据。所以你实现一个数据源委托,它具有获取给定行的单元格数据的方法等......这使得你很容易。您只需使用该控件并插入数据的细节即可。 UITableView将为您做所有事情......只回答一些具体问题。一位代表回答这几个具体问题。
一个文本控件 - 你添加一个文本控件到你的视图和瞧!你可以输入它并且很好。但是如果你想在开始输入或输入完成时做些什么呢?那么,文本控件为委托提供了一些方法,使您可以挂钩到文本控件的执行管道中。它允许文本控件为你做所有事情,并允许你在你需要的地方插入代码。很多时候,可以通过插入代码来决定是否允许某些内容。控制器会回电并询问,我应该能够做x?您可以插入代码并影响行为。
如果你正在创建一个控件或类,你可以创建你自己的协议,数据源委托等...所以你的控件可以专注于做广告。例如,假设你想创建一个任务控制。您可以:
首先,创建合同。嘿,如果你要为我的控制提供数据,这些就是我要问你的问题。我会从那里拿...在这种情况下,我会问你任务的数量,我会让你给我一个给定行号的任务。
@protocol XXTaskBoardDelegate <NSObject>
-(NSInteger*)getTaskCount;
-(XXTask*)getTaskForRow:(NSInteger*)rowNumber;
@end
在控制或类别,给消费者的方式给我们的委托数据源类,将回答这些问题的控制会问。在这一点上,控制是一个纯粹的控制。它对于如何获取数据一无所知。它要求一个实现契约/协议的对象(id)。 ID
@implementation XXTaskBoard
- (void)setDelegate:(id<XXTaskBoardDelegate>)newDelegate
{
// the control stores the delegate so it can callback and ask you questions.
}
然后,对于委托类,在头申报您实现正式协议 并在实施M档您提供的代码。
@interface AppController : NSObject<XXTaskBoardDelegate>
{
//...
}
那么,实现它在执行
@implementation AppController
- (NSInteger*)getTaskCount
{
return [model queryTaskCount];
}
- (XXTask*)getTaskForRow:(NSInteger*)rowNumber
{
return [[model tasks] getItem:(NSInteger*)rowNumber];
}
委托是另一个类可以传递消息的对象。实践中,委托类必须符合委托协议。
例如,我们将采取一个表视图控制器的子类。这是您的表格视图的代表。首先定义它是这样一个表视图委托:
MyTableViewController : UITableViewController <UITableViewDelegate>
这就是说类MyTableViewController
是UITableViewController
一个子类,符合UITableViewDelegate
协议。
设置[tableView setDelegate:self]
(或在IB中定义它)然后将self
对象传递给tableview以便tableview向其发送消息。
它发送的主要消息是didSelectRowAtIndexPath
消息,它告诉你的类,用户已经按下了表格视图单元格。
因此,采用点击事件(表格视图)的对象会传递单元格已被点击到委托对象(在本例中为您的MyTableViewController
对象)的消息。
委托协议的存在使您可以确保委托对象具有处理消息的必要方法。委托协议中的方法可以是@optional
或强制执行。任何可选的方法都不必定义。在你的MyTableViewController
类中,方法didSelectRowAtIndexPath
是可选的 - 你不必拥有它。如果表视图没有找到该方法,它就不会调用它。
但是cellForRowAtIndexPath
是必要的,如果没有它,你的应用程序将无法编译。
我希望这可以帮助你,并且直接为你服务。如果您需要更多信息,请告诉我。
代表只是从某个东西获得回调的方法。您将委托(指向符合协议的对象的指针)传递给某个事物,以及何时为您提供了新数据,或者何时发生某个事件可以在代理上进行方法调用。
例如,当发生事件时,例如将您的应用程序放入后台或应用程序即将终止UIApplication对象,将调用您的应用程序委托让它知道。当一个CLLocationManager有一个新的GPS位置时,会调用你的代理将它传递给新的位置。 UITableViews调用它们的委托让UITableViewCells显示在表中。 iOS中的代表有很多用途。
- 1. 应用程序委托在xcode项目中做什么?
- 2. 我在做什么我的ViewController子视图委托错了?
- 3. IBAction委托人
- 4. 委托人在目标中查询 - C
- 5. 在JavaScript/node.js中做了些什么?
- 6. 这些在maven pom.xml中做了什么
- 7. Xcode在索引时做些什么?
- 8. Xcode:在特定日期做些什么
- 9. 目标C中无委托人
- 10. 声明委托人
- 11. extern在目标C中做了什么?
- 12. c#,.net,委托,异步回调。我在这里做错了什么?
- 13. iOS:在收到UserNotification时做些什么?
- 14. 请解释.NET委托人
- 15. robots.txt文件在PHP项目中做了什么?
- 16. 委托模式ios
- 17. 什么是.NET中的一个委托人?
- 18. 在SceneKit中做些什么
- 19. iphone进行个人委托
- 20. 那些gcc选项在做什么?
- 21. “+”在CSS中做了什么?
- 22. 什么时候调用每个这些iOS背景委托方法?
- 23. 访问共享委托人的iPhone/iPad委托?
- 24. 构建我的xcode项目时构建了什么目标
- 25. 你用Scheme Scheme宏做了些什么?
- 26. UISplitViewController委托在一个单身人士
- 27. 是什么在委托财产申报
- 28. XCode(iOS)中委托的自动导入回调
- 29. 这些Javascript表达式(+!)做了什么?
- 30. 方法是做委托
请参阅:http://stackoverflow.com/questions/7118598/what-is-the-difference-between-notifications-delegates-and - 协议,并记得在发布之前进行搜索! :) – Luke
关于代表的任何其他问题?答案有道理? – bryanmac
另请参阅[链接](http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html)。 – HDdeveloper