在objective-c中扩展类

时间:2012-05-03 06:19:59

标签: objective-c

我正在尝试学习objective-c并遇到一些问题。我创建了类Creature并使用Dog类扩展它。

但是当我调用方法状态时,返回结果看起来像是从生物类调用,而不是Dog。

github的链接source

P.S。如果您发现其他错误和内存泄漏点,请报告我)

代码:

@interface Creature: NSObject
    - (NSString *)state;
..

@implementation Creature
- (NSString *)state
{
    return [_name stringByAppendingString: ([self isHungry] ? @" is hungry" : @" not hungry")];
}

// Dog 

@interface Dog: Creature
..

@implementation Dog
- (NSString *)state
{
    return [[super state] stringByAppendingString: ([self isFriendly] ? @" and friendly" : @" and unfriendly")];
}

调用方法

Dog *creature = [Dog CreatureBorn];
NSLog([creature state]);

1 个答案:

答案 0 :(得分:3)

看起来你只有一个Dog.h而没有实现文件(Dog.m)。 因为Objective-C是一种动态语言,所以所有类都是在运行时创建的(使用objc_allocateClassPair()函数,IIRC)。通过只有一个头文件,你只是向前声明该类,它实际上并没有创建。

此外,您的Dog类不是继承自Creature,它只是通过PetProtocol协议确认。 Objective-C中的协议更像是Java或C#中的接口,它们不是类。

在内部,Objective-C运行时非常简单。它只是归结为一堆C函数和结构。如果您有兴趣了解Objective-C中的工作方式并且不介意阅读C代码,我强烈建议您阅读Apple的Objective-C Runtime Reference