可能标题有些拗口, 我想表达的是这样一个意思:
有一组方法被若干个类所实现, 但是在这些方法中所要调用到的数据/方法并不是在一个类中的, 比如有三个controller里的button都要实现- (void) buttonPress: 这个方法, 并且都要用到自己controller中的自定义方法, 然后再利用- (void) buttonPress:这个方法反馈一些共同的操作.
基于上面的需求, 我们很自然的想到了protocol, 解决方案如下:
定义一个protocol, 包含- (void) buttonPress: 方法, 这个方法将被定义到TableViewControll里面, 并且会要调用一个TableViewControll的方法, 之后再执行aClassWithButtonMethodDelegate里面的一些相同的代码(也可能在这里面调用了一些aClassWithButtonMethodDelegate私有的变量), 因此在aClassWithButtonMethodDelegate中, 我们声明了一个id<buttonMethodDelegate> _delegate, 用它来调用TableViewControll中定义的buttonPress, 这杨便可以调用到TableViewDelegate中的一些自定义变量和方法.
@protocol buttonMethodDelegate<NSObject>
@optional
- (void) buttonPress;
@end@interface aClassWithButtonMethodDelegate{id<buttonMethodDelegate> _delegate;
}- (void) useButtonPressWithDelegate: (id<buttonMethodDelegate>) aDelegate;
@end@implement aClassWithButtonMethodDelegate
- (void) useButtonPressWithDelegate: (id<buttonMethodDelegate>) aDelegate{self->_delegate = aDelegate;if([self->_delegate responseToSelector: @selector(buttonPress)])[self->_delegate buttonPress];
}
@end@interface TableViewControll<buttonMethodDelegate>
- (void) printInfo;
@end
@implement TableViewControll
- (void) printInfo{NSLog(@"This is a method from TableViewControll class.");
}
- (void) buttonPress{NSLog(@"buttonPress method has been invoked.");[self printInfo];
}
@end