代理设计模式就是自己的方法自己不实现,让代理对象去实现。
可以让多个类实现一组方法。
委托模式的好处在于:
1、避免子类化带来的过多的子类以及子类与父类的耦合
2、通过委托传递消息机制实现分层解耦
代理模式需要注意的地方时设置代理属性的时候不要用strong,而要assigne,或者weak这样可以避免循环引用。
具体实现过程:
在需要传值的类中申明协议,设置属性。
// SecondViewController.h #import <UIKit/UIKit.h> @protocol delegateName <NSObject> - (void)sendData:(NSString *)string; @end @interface SecondViewController : UIViewController @property (nonatomic, assign)id<delegateName> delegate; @end // SecondViewController.m - (IBAction)actionOne:(id)sender { // 安全判断,是否实现了sendData:方法 if ([self.delegate respondsToSelector:@selector(sendData:)]) { [self.delegate sendData:self.textfile.text]; } [self dismissViewControllerAnimated:YES completion:nil]; }
在实现的类中实现代理:
// ViewController.m #import "ViewController.h" #import "SecondViewController.h" @interface ViewController ()<delegateName> @property (weak, nonatomic) IBOutlet UILabel *lable; @property (strong, nonatomic)SecondViewController *secondVC; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.secondVC = [[SecondViewController alloc]init]; // 设置代理对象 self.secondVC.delegate = self; } - (void)sendData:(NSString *)string{ self.lable.text = string; }