Protocol 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,如需转载请自行联系原作者


相关文章
|
17天前
|
JavaScript
type和interface的异同?
type和interface的异同?
|
3月前
type 和 interface的异同
type 和 interface的异同
17 0
|
11月前
17-类和对象-封装-class和struct的区别
17-类和对象-封装-class和struct的区别
|
11月前
|
JSON Java 数据库
代码重构实战-将值对象改为引用对象(Change Value to Reference)
一个数据结构中可能包含多个记录,而这些记录都关联到同一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象
81 0
|
JSON 安全 Go
GoFrame 通用类型变量gvar | 对比 interface{}
这篇文章将介绍 GoFrame 通用类型变量gvar的概念,对比 interface{}的特点;以及如何设置gvar的并发安全开关等基础使用;介绍序列化示例代码。
166 0
GoFrame 通用类型变量gvar | 对比 interface{}
|
JavaScript 前端开发 开发者
从规范的角度看 this 丢失 —— 详解 Reference Type
从规范的角度看 this 丢失 —— 详解 Reference Type
96 0
从规范的角度看 this 丢失 —— 详解 Reference Type
关于block的本质,你懂了吗?
block应用的目的: 把将来想要执行的代码封装起来,然后在恰当的时刻再执行代码。 block本质: 1、block是封装了函数调用和函数调用环境(如:block内部要使用的参数)的OC对象。 2、block本质上也是一个OC对象,它内部也有一个isa指针(只要内部有一个isa指针,我们就可以认为他是OC对象,因为NSObject作为最基础的OC对象,第一个成员变量就是isa指针,这是OC对象的特征)。
214 0
关于block的本质,你懂了吗?
|
设计模式 缓存 Java
NIO中Buffer的重要属性关系解析
NIO中Buffer的重要属性关系解析
159 0
|
C++
warning C4250: “MyClassD”: 通过域控制继承“MyClassC::MyClassC::MyMethod”
warning C4250: “MyClassD”: 通过域控制继承“MyClassC::MyClassC::MyMethod”
289 0