gpt4 book ai didi

objective-c - Objective C 中的类似乎无法识别继承的消息

转载 作者:行者123 更新时间:2023-12-03 18:03:50 25 4
gpt4 key购买 nike

我正在通过 Stephen G Kochan 的“Objective C 编程”来学习 ObjectiveC,但在示例方面遇到了一些困难。它创建一个继承自 Object 的简单 Fraction 类。这就是我遇到麻烦的地方,当我尝试发送对象而不是分数可以理解的消息时,例如 init、alloc 或 free(请参见下面的代码):

// Fraction
#import <stdio.h>
#import <objc/Object.h> // base object

// @interface section
@interface Fraction: Object
{
int numerator;
int denominator;
}

- (void) print;
- (void) setNumerator: (int) n;
- (void) setDenominator: (int) d;

@end


// @implementation section

@implementation Fraction;

-(void) print
{
printf(" %i/%i ", numerator, denominator);
}

-(void) setNumerator: (int) n
{
numerator = n;
}

-(void) setDenominator: (int) d
{
denominator = d;
}

@end

// Program section

int main( int argc, char *argv[])
{
Fraction *myFraction;

// Create Instance of fraction
myFraction = [Fraction alloc];
myFraction = [Fraction init];

// Set fraction to 1/3
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];


// Display the fraction
printf("The value of my fraction is: ");
[myFraction print];
printf("\n");


// Destroy the instance
[myFraction free];


return 0;
}

当我编译它时:gccfraction.m -ofraction-l objc

我收到以下警告:

fraction.m: In function ‘main’:
fraction.m:47: warning: ‘Fraction’ may not respond to ‘+alloc’
fraction.m:47: warning: (Messages without a matching method signature
fraction.m:47: warning: will be assumed to return ‘id’ and accept
fraction.m:47: warning: ‘...’ as arguments.)
fraction.m:48: warning: ‘Fraction’ may not respond to ‘+init’
fraction.m:62: warning: ‘Fraction’ may not respond to ‘-free’
fernando@McFofo ~/code/learning objective c:: ./fraction
objc[1678]: Fraction: Does not recognize selector forward::

程序在运行时提示非法指令......

有人知道这是怎么回事吗?

最佳答案

Cocoa(最流行的 Objective-C 库,它们几乎是同义词)中的类倾向于继承自 NSObject , cocoa 根类。据记录here

还有NSObject protocol ,由 NSProxy 实现。它构成了 Cocoa 支持 Distributed Objects 的基础。也就是说,我们可能有点超前了!

我还注意到您正在尝试执行以下操作:

Fraction *myFraction;
myFraction = [Fraction alloc];
myFraction = [Fraction init];

您正在为对象分配内存,然后通过用另一个对象覆盖指针来丢失它。标准做法是在一行中执行以下操作:

Fraction *myFraction = [[Fraction alloc] init];

如果您必须执行多行操作,则必须执行以下操作:

Fraction *myFraction;
myFraction = [Fraction alloc];
myFraction = [myFraction init];
// myFraction is now ready to go!

我偶然发现了一个site指的是您正在阅读的书。网站上突出显示的示例继承自 NSObject并导入<Foundation/NSObject.h> 。您是否有任何特殊原因避开此并决定 Object运行时提供的类?

关于objective-c - Objective C 中的类似乎无法识别继承的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com