スタックオーバーフローに関する私の最初の質問ですので、優しくしてください。答えを探してみましたが、本当に助けが必要です。
問題は、ニールゴールドスタインのObjective-CforDummiesからの代表者について学ぶことです。
彼はTransaction.hに次のようにあります
#import <Cocoa/Cocoa.h>
@class Budget;
@interface Transaction : NSObject {
Budget *budget;
double amount;
NSString *name;
id delegate;
}
//some init method
@end
@protocol TransactionDelegate
@required
- (void) spend: (Transaction *) aTransaction;
//additional optional method
@end
--
//そしてTransaction.mで彼はこれを持っています
#import "Transaction.h"
#import "Budget.h"
@implementation Transaction
@synthesize budget, delegate , amount;
- (void) spend {
if ([delegate respondsToSelector:@selector(spend:)])
[delegate spend:self];
}
- (id) initWithAmount: (double) theAmount forBudget: (Budget*) aBudget {
if (self = [super init]) {
budget = aBudget;
[budget retain];
amount = theAmount;
}
return self;
}
- (void) dealloc {
[budget release];
[super dealloc];
}
@end
Transaction.mファイルの支出方法を理解するのに問題があります
id型インスタンス変数は、それを含むクラスの任意のメソッドを呼び出すことができますか?私は、respondsToSelectorが、メソッドが実装されているかどうかをコンパイラーに通知するNSObjectメソッドであることを理解しています。しかし、idタイプのどれがそのメソッドを呼び出すかをどのように委任できますか?コンパイラは、それがどのオブジェクトであるかさえ知りません...
助けてください!
PS誰かが良いObjective-Cの本について何かアドバイスがあれば、私はそれを高く評価します。iPhoneの開発に取り掛かりたいのですが、まずObjective-Cの基本をよく理解する必要があると思いました。
ありがとう!