理解委托代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解委托代理相关的知识,希望对你有一定的参考价值。

原文链接:http://www.mamicode.com/info-detail-1090443.html

很多Object-c自带的类中都设置了代理属性。

如果需要使用这些类有时就需要实现这些方法。

上面链接中解释了使用委托代理实现页面传值的原理,我是这样理解的:

1、我们可以把第二个页面中的代码看作UItextField类(B类),我们在B中声明了一个协议,和一个方法名(这个方法我们会在使用它的类中根据需求去实现):

@protocol myDelegete <NSObject>

- (void)sendMessage:(NSString*)message;

@end

2、声明了一个id类型的名为delegate属性,格式如下:

@property (nonatomic , assign)id<myDelegete> delegate;

3、因为是要把B类对象的数据传到A类,所以我们还需要实现一个赋值操作:

1 - (void)leftButtonAction:(UIBarButtonItem *)sender{
2     [self.navigationController popViewControllerAnimated:YES];
3     //代理传值第六步:把B页面的一个text内的值作为参数传出去,后面会提到。
4     [self.delegate sendMessage:self.secondView.textField.text];
5 }

综上所述:声明协议、创建一个delegate(类似C指针的参数delegate,作为两个类之间传递信息的桥梁)、赋值。这三部是B需要做的事。

虾面介绍A需要做的:

1、首先是表忠心、A会遵守这个协议,因此需要先声明自己会遵守:

@interface RootViewController : UIViewController <myDelegete>

 

2、表完了忠心,就得落实,也就是实现代理方法:“我答应会做,但是具体怎么做,得听我的。”

1 - (void)sendMessage:(NSString *)message{
2     self.rootView.textField.text = message;
3 }

3、是时候拉出来练练了,设置好代理,剩下的顺其自然吧:

1 - (void)rightButtonAction:(UIBarButtonItem *)sender{
2     SecondViewController *secondVC = [[SecondViewController alloc]init];
3     secondVC.sendMessage = self.rootView.textField.text;
4     [self.navigationController pushViewController:secondVC animated:YES];
5     //代理传值第四步
6     secondVC.delegate = self;
7 }

 

以上是关于理解委托代理的主要内容,如果未能解决你的问题,请参考以下文章

十分钟理解Java中的动态代理

深入理解java动态代理的实现机制

百度T7:深入理解Java动态代理与代码模拟JDK实现动态代理JAVA核心

如何理解Spring中的IOC和AOP

性能优化之-事件代理

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段