1

我正在阅读协议(并认为我可以使用它们重写一些代码),但我似乎陷入了到底是什么使它与类不同?

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

#import <Foundation/Foundation.h>

@interface ColorController : NSObject { 

UIColor* colorToReturn;

}


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

@end

还有他们

#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)回复的好处协议,也许还有一个使用示例,我真的很感激。

4

2 回答 2

2

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

编辑删除死链接

于 2012-07-20T15:54:24.620 回答
1

而且 ObjC 协议很像 Java 接口: - 你不必实现你的协议 - 一个类可以实现多个协议,但只能从一个类继承

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

于 2012-07-20T15:53:41.223 回答