@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 ---------------
后面会继续补充不足之处。
网友评论