美文网首页
Delegate - protocol协议及委托代理(Deleg

Delegate - protocol协议及委托代理(Deleg

作者: lionsom_lin | 来源:发表于2018-01-25 16:56 被阅读28次

参考文档

Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。
协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由其它人来实现。

一、Protocol 给类加共享的属性

@protocol AppConfigData <UXYinjectioProtocol>
@property (nonatomic, strong) NSString *version;
@end

@interface AppConfig : NSObject <AppConfigData>
@end

{
    AppConfig *config = [[AppConfig alloc] init];
    [config bindInjectioWithSuiteName:@"user1"];
    config.version = @"1.1";
}

{
    AppConfig *config = [[AppConfig alloc] init];
    [config bindInjectioWithSuiteName:@"user1"];
    NSLog(@"config\n");
    NSLog(@"%@\n", config.version);
}
@protocol PeopleData <UXYinjectioProtocol>
@property (nonatomic, assign) float height2;
@property (nonatomic, assign) int age3;
@property (nonatomic ,assign) BOOL isAlive;
@property (nonatomic, copy) NSString *name;
@end

@protocol ManData <UXYinjectioProtocol>
@property (nonatomic, strong) NSArray *nicknames;
@property (nonatomic, strong) NSDictionary *books;
@end
@interface Man : NSObject <ManData, PeopleData>
@end

{
    People *people = [[People alloc] init];
    [people bindInjectioWithSuiteName:@"bill"];
    people.name = @"name";

    Man *man = [[Man alloc] init];
    [man bindInjectioWithSuiteName:@"bill"];
    NSLog(@"%@\n", man.name);
}
    AppConfig *config = [[AppConfig alloc] init];
    [config bindInjectioWithSuiteName:@"user1"];
    config.version = @"1.1";

    config = [[AppConfig alloc] init];
    [config bindInjectioWithSuiteName:@"user2"];
    config.version = @"1.2";

二、protocol协议及委托代理(Delegate)的应用

一般的委托者需要做的事:

1、创建协议(也就是代理要实现的方法)
2、声明委托变量
3、设置代理(也可以在代理中设置)
4、利用委托变量来调用协议方法(也就是让代理者开始执行协议)

代理需要做的事:

1、遵循协议
2、实现协议方法

具体代码实现

1、协议的声明

我们需要用协议来申明哪些方法是被委托出去了.

@protocol  MyUIViewDelegate <NSObject>
- (void)func;
@end
2、委托者申明一个属性

委托者里得有一个属性代表被委托者, 注意这个属性是弱引用.

@interface  MyUIView: UIView
@property(nonatomic, weak) id<MyUIViewDelegate> delegate; 
3、被委托者声明实现了协议

被委托者需要声明自己实现了委托里的协议.

@interface MyUIViewController : UIViewController <MyUIViewDelegate>
@end
4、设置委托

在被委托者里设置自己是委托者的被委托者.嘛,这句话是有些绕.

// viewcontroller. m中
- (id)init
{
    MyUIView *myView = [[MyUIView alloc] init];  //对MyUIView进行初始化
    myView.delegate = self;   // 将MyUIViewController自己的实例作为委托对象
    self.view = myView; 
}
5、委托事件

在委托者里调用委托的方法.

// MyUIView.m中
- (void)doSomething
{
    [self.delegate func];  
}

相关文章

网友评论

      本文标题:Delegate - protocol协议及委托代理(Deleg

      本文链接:https://www.haomeiwen.com/subject/rtvvaxtx.html