@classは、インターフェイスを定義しているオブジェクトと通常やりとりするオブジェクトのプロトコルを定義する必要がある場合に便利です。 @classを使用すると、クラスのヘッダーにプロトコル定義を保持できます。このような委任パターンはObjective-Cでよく使われ、 "MyClass.h"と "MyClassDelegate.h"の両方を定義する方が望ましいことがよくあります。それは、いくつかの混乱の輸入問題
@class MyClass;
@protocol MyClassDelegate<NSObject>
- (void)myClassDidSomething:(MyClass *)myClass
- (void)myClass:(MyClass *)myClass didSomethingWithResponse:(NSObject *)reponse
- (BOOL)shouldMyClassDoSomething:(MyClass *)myClass;
- (BOOL)shouldMyClass:(MyClass *)myClass doSomethingWithInput:(NSObject *)input
@end
@interface MyClass : NSObject
@property (nonatomic, assign) id<MyClassDelegate> delegate;
- (void)doSomething;
- (void)doSomethingWithInput:(NSObject *)input
@end
を引き起こす可能性がありますが、クラスを使用しているときに、あなたは、クラスのインスタンスを作成するだけでなく、見て、単一のimport文
#import "MyClass.h"
@interface MyOtherClass()<MyClassDelegate>
@property (nonatomic, strong) MyClass *myClass;
@end
@implementation MyOtherClass
#pragma mark - MyClassDelegate Protocol Methods
- (void)myClassDidSomething:(MyClass *)myClass {
NSLog(@"My Class Did Something!")
}
- (void)myClassDidSomethingWithResponse:(NSObject *)response {
NSLog(@"My Class Did Something With %@", response);
}
- (BOOL)shouldMyClassDoSomething {
return YES;
- (BOOL)shouldMyClassDoSomethingWithInput:(NSObject *)input {
if ([input isEqual:@YES]) {
return YES;
}
return NO;
}
- (void)doSomething {
self.myClass = [[MyClass alloc] init];
self.myClass.delegate = self;
[self.myClass doSomething];
[self.myClass doSomethingWithInput:@0];
}
私はちょうど 'chicken、meet egg'のためにもう1つの+1を与えることができたらいいのに – lukya
ところで、それは 'id'評価に戻ります。 – jheld
いくつかの人が.hファイルに '@ class'を入れ、.mファイルに必要なヘッダファイルをインポートする理由と、現在のクラスヘッダファイルに.hファイルをインポートするだけの理由がありますか?ちょうど好奇心、おかげで。 @bbum –