• conformsToProtocol:@protocol()的理解和用法


    1. @protocol MyProtocol  
    2.   
    3. - (void) doSomething;  
    4.   
    5. @end  
    6.   
    7. @interface MyClass : NSObject<MyProtocol>//直接符合协议的类  
    8. {  
    9. }  
    10.   
    11. @end  
    12.   
    13. @implementation MyClass  
    14.   
    15. - (void) doSomething {   
    16. }  
    17.   
    18. @end  
    19.   
    20. @interface MyOtherClass : MyClass//继承了符合协议的类,即其父类符合协议。  
    21. {  
    22.   
    23. }  
    24.   
    25. @end  
    26.   
    27. @implementation MyOtherClass  
    28.   
    29. - (void) doSomething {  
    30. }  
    31.   
    32. @end  
    33.   
    34.   
    35. int main (int argc, const char * argv[])   
    36. {  
    37.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
    38.   
    39.     MyClass *obj_one = [MyClass new];  
    40.     BOOL one_conforms = [obj_one conformsToProtocol:@protocol(MyProtocol)];  
    41.   
    42.     MyOtherClass *obj_two = [MyOtherClass new];  
    43.   
    44.     //obj_two是类的实例对象,和父类相关,其父类符合协议,则其亦符合。  
    45.   
    46.     BOOL two_conforms = [obj_two conformsToProtocol:@protocol(MyProtocol)];  
    47.     NSLog(@"obj_one conformsToProtocol: %d", one_conforms);//output:YES   
    48.     NSLog(@"obj_two conformsToProtocol: %d", two_conforms);//output:YES   
    49.     [pool drain]; return 0;  
    50. }  
    51.   
    52. //Output:  
    53.     obj_one conformsToProtocol: 1  
    54.     obj_two conformsToProtocol: 1  
    55.   
    56. //Whereas:  
    57.      MyOtherClass *obj_two = [MyOtherClass new];  
    58.      //class_conformsToProtocol是只检查当前类符不符合协议,和其父类无关。  
    59.      BOOL conforms_two = class_conformsToProtocol([obj_two class], @protocol(MyProtocol));  
    60.      NSLog(@"obj_two conformsToProtocol: %d", conforms_two);//output:NO  
    61.   
    62. //Output:  
    63.      obj_two conformsToProtocol: 0  
  • 相关阅读:
    让Dreamweaver支持cshtml (MVC Razor环境)
    href="#"与href="javascript:void(0)"的区别
    ASP.NET MVC 4 中Razor 视图中JS无法调试 (重要)
    03011_HttpServletRequest
    1004. 成绩排名 (20)
    1003. 我要通过!(20)
    C语言文件读写命令fprintf和fscanf
    1002. 写出这个数 (20)
    1001. 害死人不偿命的(3n+1)猜想 (15)
    汇编in和out实例解析
  • 原文地址:https://www.cnblogs.com/linyawen/p/2554834.html
Copyright © 2020-2023  润新知