在objective-c类别中添加func

时间:2009-02-28 01:38:57

标签: objective-c

我是一个客观的C新手。为什么我会在调用类别中创建的函数时收到警告?

#import <stdio.h>
#import <objc/Object.h>

@interface MyObj: NSObject
{
@public
    int  num;
}

-(void) print;
@end

@implementation MyObj;
-(void) print
{
    printf("%d\n", self->num);
}
@end

@implementation MyObj(more)
-(void) quack
{
    printf("Quack\n");
}
@end


int main (int argc, char *argv[])
{
    MyObj  *obj = [[MyObj alloc] init];
    obj->num = 9;
    [obj print];
    [obj quack]; //warning my not respond to quack 
    [obj release]; 
}

2 个答案:

答案 0 :(得分:3)

您需要为MyObj(更多)声明接口,例如

@interface MyObj(more)
-(void)quack;
@end

答案 1 :(得分:1)

只是想指出一些事情,因为你提到你是Obj-C的新手。

在方法内部,您无需引用self->来获取实例变量,因此您的print方法可以是:

-(void) print
{
    printf("%d\n", num);
}

另请注意,您通常不会直接访问对象方法之外的实例变量(即您不会obj->num - 实际上您并不经常在Obj中看到->运算符-C代码)。相反,你要为属性指定访问器(假设这是Objective-C 2.0):

// In the interface:
@property (assign) int num;

// In the implementation:
@synthesize num;

// In main:
obj.num = 9;