简单来说,协议就是类的指针,是多态的实现。
我们说的某个类遵循(conformsto)什么协议(procotol),是指该类实现了指定协议的必选方法。
对于协议的理解,请看代码:
1. //定义协议
2. // custom protocol
3. @protocol CustomDelegate
4. -(void)ShowMessage:(NSString*)msg;
5. @end
6.
7. //定义类使用协议
8. //A.h
9. @interface A:NSObject{
10. id <CustomDelegate> m_pDelegate;
11. //这里定义一个成员,它是一个协议,可以指向任何实现了CustomDelegate 里面
12. //必选方法(required)的类的实例
13. }
14. @property(nonamatic,assign) id <CustomDelegate> m_pDelegate;
15. @end
16.
17. //A.m
18. @implementation A
19. @synthesize m_pDelegate;
20.
21.
22. //use protocol function;
23. -(void)UseProtocolFunc{
24. [m_pDelegate ShowMessage:@"hello world"];
25. // m_pDelegate已经是B一个实例(假设为tagB)的指针,可以调用tagB的方法
26. }
27. @end
28. //B.h
29. @interface B:NSObject <CustomDelegate>{
30. }
31. @end
32. //B.m
33. @implementation B
34. -(id)init{
35. A* a = [[A alloc]init];
36. a. m_pDelegate = self;
37. //这里,因为self是类B的实例,而B遵循CustomDelegate
38. //(实现了ShowMessage方法)协议,所以编译通过.
39. [a UseProtocolFunc];
40. //让 a 通过协议调用B中的方法
41. }
42. -(void)ShowMessage:(NSString*)msg{
43. NSLog(msg);
44. }
45. @end