objc对象指向

时间:2013-03-26 20:32:08

标签: objective-c oop

我正在尝试访问实现文件中的对象,其中方法如下所示: - (Boolean)humanIsAlive:(id)humanobj;但是,Xcode抱怨没有这样的对象,并且构建失败。

在主文件main.m中,我会在main()函数中写这个:

int main(int argc, const char * argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    Human *human = [[Human alloc] init];
    MyHuman *myhuman = [[MyHuman alloc] init];

    [human create:@"John Doe" age:25];
    if ([human humanIsAlive:myhuman]) {
        NSLog(@"%@ is alive and well.", myhuman.humanName);
    } else {
        NSLog(@"%@ is dead and gone.", myhuman.humanName);
    }

    [pool drain];
    return 0;
}

以下是Xcode抱怨的代码:

- (Boolean)humanIsAlive:(id)humanobj {
    if (humanobj.living == YES) {
        return YES;
    }
    return NO;
}

似乎是合法的,除了Xcode之外的所有东西都抱怨这个对象中不存在这样的属性,并且不存在这样的对象。

帮助?

1 个答案:

答案 0 :(得分:1)

类型为id的对象上的属性无法安全地解析为任何一个对象上的实例方法,因此语言禁止它们。此外,如果您可以向id本身添加属性,我们会使用一种搞砸的语言。

您需要做的就是更具体:

- (BOOL) humanIsAlive:(MyHuman*)humanobj { //... }

如果您绝对需要处理两种不同类型的对象,请稍微安全一点并使用-isKindOfClass:,然后在适当的位置投射对象以使用它的属性。