0

我正在阅读 Stephen Kochan 写的名为“Objective-c 编程”的书。我一直在阅读它,并且我已经将一些代码直接从书中复制到我的程序中。我遇到的唯一问题是在对象上使用 free 。我的代码如下(很抱歉将整个程序放入其中,但我是菜鸟,所以很有可能我在程序的早期做错了什么):

//
//  main.m
//  prog1
//
//  Created by Brent Blackwood on 8/7/12.
//  Copyright (c) 2012 Brent Blackwood. All rights reserved.
//

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

//------- @interface section -------

@interface Fraction: NSObject {
    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[]) {


    // Create an instance of a Fraction

    Fraction *myFraction = [Fraction new];

    // Set fraction to 1/3

    [myFraction setNumerator: 1];
    [myFraction setDenominator: 3];

    // Display the fraction using the print method

    printf ("The value of myFraction is:");

    [myFraction print];
    printf ("\n");
    [myFraction free]; // ************---This is the line giving the error.---***********


    return 0;

}

我得到的错误是“没有可见的@interface for 'Fraction' 在“[myFraction free]”行之后声明选择器“free”;。我翻遍了这本书,无法弄清楚问题出在哪里。它没有提到这个错误。这是什么意思,我该如何解决?

在我问之前,我也在堆栈上查看了一些类似的问题,但他们的问题似乎不是我遇到的错误。请帮忙。谢谢!

4

2 回答 2

1

在目标 C 中,您不使用 free 来释放对象的已分配实例。free 仅在您调用“malloc”时使用。

在目标 C [MyClass new] 中不等同于 malloc,它等同于

MyClass *anInstance = [[MyClass alloc] init];

使用以下方法“释放”该对象

[anInstance release];

干杯

于 2012-08-08T20:30:05.353 回答
0

由于分配和释放对象的不同约定,这看起来像是 Objective-C 的非 Cocoa、非 Apple 变体。Xcode 严格执行 Apple 自己的 (Cocoa) 约定,这就是您收到错误的原因。

如果你想学习 iOS(或 Mac)编程,而不是因为学习纯粹形式的 Objective-C 而偏离轨道,我会尝试另一本书。

于 2012-08-08T20:37:35.007 回答