0

私は Objective-C と iOS の開発に不慣れで、私のクラスではデリゲート プロトコルを宣言しています。

私はそれを行ういくつかの例を見つけました.それらはすべて非常に似ていますが、自分自身で明確にして理解したいいくつかの違いがあります.

例 1:

(リンク - https://stackoverflow.com/a/12660523/2117550およびhttps://github.com/alexfish/delegate-example/blob/master/DelegateExample/CustomClass.h )

MyClass.h

#import <BlaClass/BlaClass.h>

@class MyClass; // removed in example 2
@protocol MyClassDelegate <NSObject>
@optional
- (void) myClassDelegateMethod:(BOOL)value;
@end

@interface MyClass : NSObject
@property (nonatomic, weak) id <MyClassDelegate> delegate;
@end

MyClass.m

#import "MyClass.h"

@implementation MyClass 
@synthesize delegate; // removed in example 2

- (void) myMethodToDoStuff {
  [self.delegate myClassDelegateMethod:YES]; 
}

@end

例 2: (リンク - http://www.tutorialspoint.com/ios/ios_delegates.htm )

実際には、これら2つの違いを除いて同じです..

異なる点:

  • 例 1 ではプロトコルの前に宣言し@classていますが、本当に必要ですか? または単にベストプラクティス。2 番目の例は、この宣言がなくても問題なく動作します。
  • 例 1 では@synthesize delegate、私が理解しているように、プロパティのゲッター/セッターを作成しますが、本当に必要なのでしょうか? 2 番目の例は、これがなくても機能します。

どちらの例も問題なく動作します。私の中で起こっている混乱を取り除きたいだけです。

ありがとう!

4

2 に答える 2

3

@class MyClassプロトコル メソッドにクラスへの参照がある場合は、 を使用する必要があります。プロトコル メソッドがクラスにパラメーターを提供することは一般的です。あなたの例ではそれをしていないので、必要ありません。

の使用は@synthesizeしばらく必要ありませんでした。特別な理由がない限り、使用しないでください。

于 2014-05-18T15:35:23.660 に答える
1

@classに到達する前にクラスが存在することをコンパイラに伝えます@interface。2 つのクラス/プロトコル ヘッダーが#import互いにのみ必要な場合に便利です。プロトコルを作成すると、その可能性が高くなります。

@synthesize 以前は getter と setter を作成するために必要でしたが、現在はいわゆる自動プロパティもあります。を使用しない場合@synthesize、コンパイラはプロパティ値を保持するインスタンス変数を作成し、とにかくゲッターとセッターを生成します。@synthesizeプロセスをより細かく制御できますが、もう必要ありません。

于 2014-05-18T15:34:37.620 に答える