object-c学习:协议protocol

原创 2012年03月21日 14:09:33

 @interface 相当于是Object-C 的类的原型,与JAVA 中的接口意义是不同的,Object-C
中的 @protocol 才是和JAVA 中的接口等价的东西。例如:Object-C 的继承也是单继承,只
允许有一个父类,但是@protocol 是允许多继承的(按照Object-C 的说法叫做某类遵从了协
议A、协议B,而不是继承),这些都与JAVA 的接口一致。java中的interface可以有很多,没有固定的限制。

Printing.h
@protocol Printing1
-(void) print1;
@end
@protocol Printing2
-(void) print2;
@end
@protocol Printing3 <Printing2>
-(void) print3;
@end
Printing3 <Printing2>的意思是Printing3 遵从(继承)Printing2,<>是遵从@protocol 协议的语
法。

Fraction.h
#import <Foundation/Foundation.h>
#import "Printing.h"
@interface Fraction: NSObject <Printing1,Printing3>{
int numerator;
int denominator;
}
-(Fraction*) initWithNumerator: (int) n denominator: (int) d;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
-(int) numerator;
-(int) denominator;

@end
Fraction.m
#import "Fraction.h"
@implementation Fraction
-(Fraction*) initWithNumerator: (int) n denominator: (int) d{
self=[super init];
if(self){
[self setNumerator: n];
[self setDenominator: d];
}
}
-(void) setNumerator: (int) n{
numerator=n;
}
-(void) setDenominator: (int) d{
denominator=d;
}
-(int) numerator{
return numerator;
}
-(int) denominator{
return denominator;
}
-(void) print1{
printf("1:%d/%d\n",numerator,denominator);
}
-(void) print2{
printf("2:%d/%d\n",numerator,denominator);
}
-(void) print3{
printf("3:%d/%d\n",numerator,denominator);
}
@end

 

main.m
#import "Fraction.h"
int main (int argc , const char *argv[]){
Fraction *frac=[[Fraction alloc] initWithNumerator: 3 denominator: 5];
<Printing1> p1=frac;//使用protocol 类型,相当于JAVA 中使用接口类型作为对象
的引用List list=ArrayList 的实例。
//也可以写作 id <Printing1> p1=frac;
[p1 print1];
id<Printing1,Printing2,Printing3> p2=frac;
//从这里可以看出id 是一个泛型对象,在id 后面使用<>作为泛型参数可以明确的
告诉别人你想把id 当作哪些种协议去使用,当然你可以不写泛型参数。
[p2 print2];
[p2 print3];
//-(BOOL) conformsToProtocol: (Protocol*) prot 用于判断对象是否遵从某
个protocol。
if([frac conformsToProtocol: @protocol(Printing1)]
&&[frac conformsToProtocol: @protocol(Printing2)]
&&[frac conformsToProtocol: @protocol(Printing3)]){
printf("YES");
}else{
printf("NO");
}
[frac release];
return 0;
}

理解object-c委托和协议

以下是复制别人的,看着不粗 今天看到一个哥们总结 delegate 和 protocol关系用了这样的一个比喻,觉得很贴切,拿来给大家分享一下:       把自己不想干的一些事情(洗衣做...
  • wuxinyanzi
  • wuxinyanzi
  • 2014年12月18日 09:31
  • 1318

Object C 中协议使用详解

一、 简单使用 1.基本用途 ¬可以用来声明一大堆方法(不能声明成员变量) ¬只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 ¬只要父类遵守了某个协议,就相当于子类也遵守了...
  • liulanghk
  • liulanghk
  • 2015年01月07日 11:31
  • 979

iOS SDK详解之NSCopying协议

原创blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=contents 欢迎关注我的iOS SDK详解专栏 http://blog....
  • Hello_Hwc
  • Hello_Hwc
  • 2015年08月15日 15:18
  • 2620

Object-C学习笔记-Protocol(协议)与非正式协议

// Box.m #import "Box.h" @implementation Box // ...省略代码 - (void) print:(id)pObj { [pObj print];...
  • siemenliu
  • siemenliu
  • 2012年08月06日 20:47
  • 1904

object-c学习:协议 Protocol

在Object-C中,委托和数据源都是由协议实现的。协议定义了一个类与另一个类进行沟通的先验方式。 它们包含一个方法列表,有些是必须被实现的,有些是可选的。 任何实现了必需方法的类都被认为符合协议...
  • yanfangjin
  • yanfangjin
  • 2012年03月19日 16:56
  • 1689

Objective-C协议和委托

委托和协议是两个概念,协议实际上相当于C++中的纯虚类的概念,只定义并只能由其它类来实现。而委托类似于Java中的接口。(Objective-C实现委托这种机制是利用协议来实现的,这种说法我现在认为是...
  • qyh791414379
  • qyh791414379
  • 2015年05月08日 15:36
  • 243

objective-c之委托协议详细讲解

委托协议,相信是大多objective-c初学者非常疑惑的一个概念,下面我来给大家讲解讲解: 下面先让大家了解几个概念 protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议...
  • ComeOnTom
  • ComeOnTom
  • 2012年04月10日 11:11
  • 735

object-c学习:协议protocol

@interface 相当于是Object-C 的类的原型,与JAVA 中的接口意义是不同的,Object-C 中的 @protocol 才是和JAVA 中的接口等价的东西。例如:Object-C ...
  • u012242853
  • u012242853
  • 2014年04月25日 10:57
  • 313

object-c的protocol(协议)

在object-c中,协议的声明类似于类接口的声明,但是,协议没有父类,而且不能定义成员变量,只能定义成员函数,而且成员函数并不是在这个协议中实现,而是要在使用它的类中实现。  1. 使用说明:   ...
  • liranke
  • liranke
  • 2013年08月04日 07:44
  • 1720

Objective-c的NSCopying协议

// Person @interface Person : NSObject @property (nonatomic, copy) NSString* name; @property int a...
  • bboyfeiyu
  • bboyfeiyu
  • 2014年05月06日 14:12
  • 1539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:object-c学习:协议protocol
举报原因:
原因补充:

(最多只允许输入30个字)