理解委托代理
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 }
以上是关于理解委托代理的主要内容,如果未能解决你的问题,请参考以下文章
百度T7:深入理解Java动态代理与代码模拟JDK实现动态代理JAVA核心
对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段