美文网首页
深入浅出的delegate

深入浅出的delegate

作者: 水滴石轩 | 来源:发表于2019-10-30 15:25 被阅读0次

@protocol name<NSObject>

@end

修饰符

@optional 可选择实现

@required 必须实现

@property (nonatomic, weak) id<name> delegate;

if([_delegate respondsToSelector:@seletor(method)]) {

[_delegate method];

}

vc.delegate = self;

A类

self    ViewController *    0x7f9cd3502a40    0x00007f9cd3502a40

_tableView    UITableView *    0x7f9cd384ac00    0x00007f9cd384ac00

_sourceArray    __NSArrayM *    @"6 elements”    0x0000600001ad8960

B类

self    DeviceInfoViewCtrl *    0x7f9cd3619d90    0x00007f9cd3619d90

tableView    UITableView *    0x7f9cd3865e00    0x00007f9cd3865e00

indexPath    NSIndexPath *    0x9bd6d09e09c6781c

_deviceDelegate    ViewController *    0x7f9cd3502a40    0x00007f9cd3502a40

_tableView    UITableView *    0x7f9cd384ac00    0x00007f9cd384ac00

_sourceArray    __NSArrayM *    @"6 elements”    0x0000600001ad8960

protocol只能声明方法,不能声明属性,个人理解:protocol没有父类,只提供两个类之间的交互功能,本身不会持有属性、变量等值,不能定义示例变量,起到接口的作用。

B类在A类初始化push时,B类属性delegate,被设置为A类的对象即self;为避免B类pop或是dismiss时,B类无法将delegate的引用计数置为0,将其使用weak来修饰。

delegate本身就是A类的对象,打印得出A类的self和B类属性的delegate的内存地址是一样的;

在B类调用时,就是使用A类的对象调用A类的方法,为避免A类没有该方法,故使用respondsToSelector来判断。

----------------- end ---------------

后面会继续补充不足之处。

相关文章

网友评论

      本文标题:深入浅出的delegate

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