1

私はプロトコルを読んでいます(そして、それらを使用していくつかのコードを書き直すことができるかもしれないと考えています)が、クラスとは何が違うのか正確にはわからないようです?

たとえば、クラス 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]; ここでの利益は正確には何ですか?

現在、私の見解はおそらく、私がプロトコルの初心者/経験が浅く、それらとその使用法についての見解が限られているためです。プロトコルとおそらく使用例です。本当に感謝しています。

4

2 に答える 2

2

プロトコルは実装を提供するのではなく、いくつかの機能の宣言のみを提供します。そのプロトコルに準拠するクラスについては、関数を手動で実装する必要があります。(これの一般的な例はデリゲート パターンです)。プロトコルに慣れている場合、プロトコルは Java のインターフェースに似ています。

削除されたデッドリンクを編集

于 2012-07-20T15:54:24.620 に答える
1

また、ObjC プロトコルは Java インターフェースによく似ています: - プロトコルを実装する必要はありません - クラスは複数のプロトコルを実装できますが、1 つのクラスからのみサブクラス化できます。

したがって、クラスまたはプロトコルが 1 つのクラス (動作の多くを継承するサブクラス) によってのみ使用されることが予想される場合は、クラスを作成します。ただし、複数のクラスがクラスまたはプロトコルを使用することが予想される場合は、プロトコルを作成してください。

于 2012-07-20T15:53:41.223 に答える