我关于stackoverflow的第一个问题,所以请温柔。我试过寻找答案,但我真的需要帮助。
问题在于从 Neal Goldstein 的 Objective-C for Dummies 中学习代表
他在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 的基础知识。
谢谢!