Student.h:
#import <Foundation/Foundation.h> @protocol Study,Learn; @interface Student : NSObject<Study,Learn> @end
Student.m:
#import "Student.h" #import "Study.h" #import "Learn.h" @implementation Student @end
#import <Foundation/Foundation.h> @protocol Study <NSObject> //@required表示必须实现 //随便字面上说是必须实现,但是编译器并不强求实现 @required -(void)test1; -(void)test2; //@optional表示可选(可实现,也可以不实现) @optional -(void)test3; @end
Learn.h:
#import <Foundation/Foundation.h> @protocol Learn <NSObject> @end
main:
#import <Foundation/Foundation.h> #import "Student.h" #import "Learn.h" @protocol Study; int sum(int a,int b){ return a+b; } void test(){ //调用block方法求和 int c=sum(10,10); NSLog(@"调用block方法求和:%i",c); } void test1(){ //定义了Sum这种block类型 typedef int (^Sum1) (int,int); //定义了SumP这种指针类型,指向函数的 typedef int (*SumP) (int,int); //定义了一个sum的Block变量 Sum1 Sum12=^(int a,int b){ return a+b; }; int s=Sum12(10,10); NSLog(@"sum:%i",s); //因为宏定义的时候已经包含了*,所以在定义变量的时候不需要加*了 SumP p=sum; //int j=(*p)(20,30); int j=p(20,30); NSLog(@"函数sum:%i",j); } int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu=[[[Student alloc] init] autorelease]; //conformsToProtocol:判断是否遵守了协议 if([stu conformsToProtocol:@protocol(Study)]) { NSLog(@"遵守了Study协议"); } //respondsToSelector:判断是否实现了某一方法 if(![stu respondsToSelector:@selector(test)]) { NSLog(@"Student没有实现这个方法"); } //block的实现,block跟函数调用差不多,但block可以写在任何地方,函数不能写在函数内部,block跟指向函数的指针用法一样 int (^Sum)(int,int)=^(int a,int b){ return a+b; }; //调用block方法求和 int c=Sum(10,10); NSLog(@"调用block方法求和:%i",c); //调用函数方法求和 int d=sum(11, 11); NSLog(@"调用函数方法求和:%i",d); //调用函数指针的方法求和,定义一个指针指向一个函数 int(*sumP)(int,int)=sum; //(*sump)代表指向的函数 int i=(*sumP)(22,22); NSLog(@"调用指向函数的指针的方法来求和:%i",i); NSLog(@"******************************************"); test1(); } return 0; }
结果:
2013-08-02 14:53:13.490 Protocol Block 成员变量补充[713:303] 遵守了Study协议
2013-08-02 14:53:13.491 Protocol Block 成员变量补充[713:303] Student没有实现这个方法
2013-08-02 14:53:13.492 Protocol Block 成员变量补充[713:303] 调用block方法求和:20
2013-08-02 14:53:13.493 Protocol Block 成员变量补充[713:303] 调用函数方法求和:22
2013-08-02 14:53:13.493 Protocol Block 成员变量补充[713:303] 调用指向函数的指针的方法来求和:44
2013-08-02 14:53:13.493 Protocol Block 成员变量补充[713:303] ******************************************
2013-08-02 14:53:13.494 Protocol Block 成员变量补充[713:303] sum:20
2013-08-02 14:53:13.494 Protocol Block 成员变量补充[713:303] 函数sum:50
本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366482,如需转载请自行联系原作者