Objective-C协议vs继承vs扩展?

时间:2010-06-07 21:49:47

标签: objective-c inheritance extend

我有几个类几乎相同的代码。它们之间只有一两个字符串不同。我想做的是从另一个定义那些函数的类中使它们成为“x”,然后使用常量或其他东西来定义那些不同的字符串。我不确定“x”是继承还是扩展或什么。这就是我需要帮助的地方。

例如:

objectA.m:

-(void)helloWorld {
    NSLog("Hello %@",child.name);
}

objectBob.m:

#define name @"Bob"

objectJoe.m

#define name @"Joe"

(我不确定定义字符串是否合法,但这可以解决问题)

如果objectBob.m和objectJoe.m甚至不必定义方法,只需要它们与objectA.m的关系,那将是理想的。有没有办法做这样的事情?它有点像协议,除了相反,我希望“协议”实际定义函数。


如果一切都失败了,我只会制作objectA.m:

-(void)helloWorld:(NSString *name) {
    NSLog("Hello %@",name);
}

让其他文件调用该函数(只有#import objectA.m)。

2 个答案:

答案 0 :(得分:2)

只需在子类中创建一个-name方法(您需要一个基类,然后是每个类型的子类)。

然后做:

- (void)helloWorld {
    NSLog(@"hello %@", [self name]);
}

编辑:修复非objc之类的方法命名。 再次编辑:修复方法。

答案 1 :(得分:0)

听起来像是对我的继承。将helloWorld方法定义为NSLog(@"Hello %@", name),并让子类为其name实例变量赋予不同的值。 (请注意,我所说的是实例变量,而不是预处理器宏,这对于此目的是无用的。)