Delegate详解

@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 --------------- 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值