Objective-C:类与协议

时间:2012-07-20 15:44:40

标签: objective-c protocols

我正在阅读协议(并且我认为我可以使用它们重写一些代码)但是我似乎陷入了与一个类完全不同的问题?

例如,如果我有一个ColorController类:

#import <Foundation/Foundation.h>

@interface ColorController : NSObject { 

UIColor* colorToReturn;

}


- (UIColor* ) setColor : (float) red : (float) green : (float) blue; 

@end

和.m

#import "ColorController.h"

@implementation ColorController 


- (UIColor* ) setColor : (float) red : (float) green : (float) blue { 

float newRed = red/255;
float newGreen = green/255;
float newBlue = blue/255;

colorToReturn = [UIColor colorWithRed:newRed green:newGreen blue:newBlue alpha:1.0];

return colorToReturn;
}
@end

然后将其导入另一个类:

ColorController* colorManager = [ColorController new]; 

UIColor* newColor = [colorManager setColor:66.0:66.0:66.0];

这似乎很有意义转换为协议,因为很多其他类可以使用setColor方法。但我不确定我对协议的理解是否已关闭,我认为一旦声明了协议,它就可以被其他类使用,但由于你必须将它包含在.h文件中,对我来说唯一可辨别的区别是使用协议可以在我导入协议的任何类中直接调用setColor方法,而导入类时我必须回调类和方法[colorManager setColor:66.0:66.0:66.0];这里的收益究竟是什么?

现在我的观点可能是因为我是一个新手/没有经验的协议,对他们及其用法的看法有限,所以如果有人可以给我一个简短的(除了“去阅读文档”:D)回复协议的好处,也许是一个使用的例子,我真的很感激。

2 个答案:

答案 0 :(得分:2)

协议不提供实现,只提供某些功能的声明。您仍然必须手动为任何符合该协议的类实现这些功能。 (一个常见的例子是委托模式)。协议类似于java中的接口,如果你熟悉它们的话。

修改删除了死链接

答案 1 :(得分:1)

ObjC协议很像Java接口: - 您不必实施协议 - 一个类可以实现多个协议,但只能从一个类

创建子类

因此,如果您希望您的类或协议仅由一个类(一个继承了您的大部分行为的子类)使用,那么就创建一个类。但是,如果您希望多个类使用您的类或协议,那么请制定协议。