@protocol name<NSObject>
@end
修飾符
@optional 可選擇實現(xiàn)
@required 必須實現(xiàn)
@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犬耻,被設(shè)置為A類的對象即self;為避免B類pop或是dismiss時执泰,B類無法將delegate的引用計數(shù)置為0枕磁,將其使用weak來修飾。
delegate本身就是A類的對象术吝,打印得出A類的self和B類屬性的delegate的內(nèi)存地址是一樣的计济;
在B類調(diào)用時,就是使用A類的對象調(diào)用A類的方法排苍,為避免A類沒有該方法沦寂,故使用respondsToSelector來判斷。
----------------- end ---------------
后面會繼續(xù)補(bǔ)充不足之處淘衙。