Objective c 在目标C中使用free时出错

Objective c 在目标C中使用free时出错,objective-c,cocoa,free,Objective C,Cocoa,Free,我正在读斯蒂芬·科昌写的一本名为《用objective-c编程》的书。我一直在通读它,我把一些代码直接从书中复制到我的程序中。我唯一的问题是在对象上使用free。我的代码如下(很抱歉把整个程序都放进去了,但我是一个noob,所以我很有可能在程序的前面做了一些错误的事情): // //main.m //程序1 // //布伦特·布莱克伍德于2012年8月7日创作。 //版权所有(c)2012布伦特·布莱克伍德。版权所有。 // #进口 #进口 //-------@接口部分------- @接口分数

我正在读斯蒂芬·科昌写的一本名为《用objective-c编程》的书。我一直在通读它,我把一些代码直接从书中复制到我的程序中。我唯一的问题是在对象上使用free。我的代码如下(很抱歉把整个程序都放进去了,但我是一个noob,所以我很有可能在程序的前面做了一些错误的事情):

//
//main.m
//程序1
//
//布伦特·布莱克伍德于2012年8月7日创作。
//版权所有(c)2012布伦特·布莱克伍德。版权所有。
//
#进口
#进口
//-------@接口部分-------
@接口分数:NSObject{
整数分子;
整数分母;
}
-(作废)打印;
-(void)集合分子:(int)n;
-(void)集合分母:(int)d;
@结束
//-------@执行科-------
@执行分数;
-(作废)打印{
printf(“%i/%i”,分子、分母);
}
-(void)集合分子:(int)n{
分子=n;
}
-(void)集合分母:(int)d{
分母=d;
}
@结束
//-------节目组-------
int main(int argc,char*argv[]){
//创建一个分数的实例
分数*我的分数=[新分数];
//将分数设置为1/3
[分子:1];
[分母:3];
//使用打印方法显示分数
printf(“myFraction的值为:”);
[我的分数打印];
printf(“\n”);
[myFraction free];//************--这是给出错误的行---***********
返回0;
}
我得到的错误是“[myFraction free]”行之后的“没有可见的@interface for'Fraction'声明选择器“free'”;。我看了这本书,不知道问题出在哪里。它没有提到这个错误。这意味着什么?我如何修复它


在我提问之前,我也在stack上看过一些类似的问题,但它们的问题似乎并不是我遇到的错误。请帮忙。谢谢

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

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

MyClass *anInstance = [[MyClass alloc] init];
使用以下命令“释放”此对象

[anInstance release];

Cheers

看起来像Objective-C的非可可、非苹果变体,因为分配和释放对象的约定不同。Xcode严格执行苹果自己的(Cocoa)约定,这就是为什么会出现错误


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

该程序所要做的就是制作一个“分数”对象并打印出来。结果只是一行文字说明了分数;而不是“新建”,但这也不起作用,我不知道这是否会产生影响。当我在没有那行代码的情况下运行程序时,它执行时没有任何错误,但是我想养成良好编程和高效编程的习惯,书中说在使用对象后释放它们是一个好习惯。方法
[X new]
相当于
[[X alloc]init]
,所以两者之间没有真正的区别。(不要求相同,但按照惯例是相同的。)您使用的是这本书的古老版本
free
在1993年作为新基类创建
NSObject
之前就存在了。得到一本更新的书!!free的语法也是free(aPtr);非[无目标];谢谢用户,我刚刚试过你的答案。我又遇到了一个错误。“ARC禁止发送“释放”的明确消息。你没有说你正在使用ARC-根本不用麻烦释放它ARC会帮你的。干杯(ARC为您在代码中插入发布声明)好的,谢谢。。。对不起,我是个笨蛋,我甚至不知道ARC是什么。我甚至不知道我在用它。我只是按照书上的说明做的不过,谢谢你,你的回答非常清楚,内容丰富。
发布
免费
的含义并不完全相同;前者只会将对象移动到离解除分配更近的位置。
[anInstance release];