我是一个客观的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];
}
答案 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;