Protocol Block成员变量补充

本文详细介绍了Objective-C中的协议使用方法,包括如何声明和实现协议,并通过具体示例展示了如何利用Block进行求和操作。此外,还涉及到了Block与函数及函数指针之间的区别与联系。

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


Study.h:

#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] 函数sum50






















本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366482,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值