IOC的开发中,简单概括就是
1.创建类
2.通过类创建对象
3.对象调用方法
4.方法实现功能
开发过程中很多时候我们都要在不同类之间相互传递值,比如说两个UIViewController A 和 B。我们由A进入B,就需要在A中创建B这个对象,在能获得B这个对象的前提下,我们由A传值给B就可以用简单的属性传值或者是方法传值。但是当我们在B中完成了一定操作后要把所需数据返回给A时(回调),我们无法获得A这个对象,这时就可以通过定义非正式协议来实现传值
定义协议就相当于给当前类一个通商口岸,让其他类通过书写协议中的方法,来实现与定义协议类的贸易往来。
非正式的协议的书写打个比方:Apple公司设计了iPhone(协议的书写),但是它不会自己去生产iPhone,因为生产iPhone的对象都在中国(Apple中没有负责生产的对象)。Apple委托富士康来生产,富士康就代替Apple来生产iPhone(设置delegate)。本来富士康原来不生产iPhone, 现在要生产了,他就要达到Apple提出的要求(遵循Apple的协议),并且他得自己加一个生产iPhone的生产线(书写生产iPhone的方法),这就实现委托。Apple让富士康生产iPhone的时候(Apple的代理调用方法),并且给富士康IOS系统(方法参数),这时候富士康就是能生产处iPhone。
代码:
1.协议书写
Apple类的.h文件
#import <UIKit/UIKit.h>
@protocol SecondViewControlerDelegate;
@interface SecondViewController : UIViewController
@property(nonatomic,assign)id<SecondViewControlerDelegate>delegate;
@end
@protocol SecondViewControlerDelegate <NSObject>
- (void)sendMessage:(NSString *)str;
@end
2.遵循协议
富士康类.h文件
#import <UIKit/UIKit.h>
#import "SecondViewController.h"
@interface RootViewController : UIViewController<SecondViewControlerDelegate>
@end
3.设置代理
富士康类.m文件
SecondViewController * Apple = [[SecondViewController alloc]init];
Apple.delegate = self;
4.书写协议方法
富士康类.m文件
- (void)sendMessage:(NSString *)str
{
NSLog(@"%@",str);
}
5.调用方法
苹果类.m文件
[self.delegate sendMessage:@“生产”];
总结:
1,协议不是类,它是定义了一个其他对象可以实现的接口
2,协议定义了可以被其他任何类实现的方法