Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 不能在XCode 4.5中调用释放?_Objective C - Fatal编程技术网

Objective c 不能在XCode 4.5中调用释放?

Objective c 不能在XCode 4.5中调用释放?,objective-c,Objective C,我需要一些帮助,我是objective-c的初学者,我试图编写我的第一堂课 但不幸的是,它没有起作用。这是我的密码 #import <Foundation/Foundation.h> @interface Fraction :NSObject{ int numerator ; int demoniratoe ; } -(void) print; -(void) setnumerator: (int) n; -(void) setdemoniratoe: (int) b

我需要一些帮助,我是objective-c的初学者,我试图编写我的第一堂课 但不幸的是,它没有起作用。这是我的密码

#import <Foundation/Foundation.h>
@interface Fraction :NSObject{
    int numerator ;
    int demoniratoe ;
}
-(void) print;
-(void) setnumerator: (int) n;
-(void) setdemoniratoe: (int) b;

@end

@implementation Fraction
-(void) print
{
    NSLog(@"%i/%i",numerator,demoniratoe);
}
-(void) setnumerator: (int) n{
    numerator = n;
}
-(void) setdemoniratoe: (int) b{
    demoniratoe = b;
}

@end
int main(int argc, const char * argv[])
{

@autoreleasepool {

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

    [myfraction setnumerator:1];
    [myfraction setdemoniratoe:3];

    NSLog(@"The value of Fraction is :");
    [myfraction print];
    [myfraction release];

}
    return 0;
}
#导入
@接口分数:NSObject{
整数分子;
德莫尼拉托国际酒店;
}
-(作废)打印;
-(void)集合分子:(int)n;
-(void)setdemoniratoe:(int)b;
@结束
@实现分数
-(作废)打印
{
NSLog(@“%i/%i”,分子,脱涅拉托);
}
-(void)集合分子:(int)n{
分子=n;
}
-(void)setdemoniratoe:(int)b{
demoniratoe=b;
}
@结束
int main(int argc,const char*argv[]
{
@自动释放池{
分数*我的分数;
myfraction=[分配分数];
myfraction=[Fraction init];
[分子:1];
[myfraction setdemoniatoe:3];
NSLog(@“分数的值为:”);
[我的分数打印];
[我的分数释放];
}
返回0;
}
错误消息出现在[myfraction release]上,该版本不可用
我使用的是XCode版本4.5

如果您使用的是自动引用计数(ARC),那么您就不再使用release、autorelease和retain,因为编译器会为您处理这些问题。

因为新版本的XCode假设您使用自动引用计数(ARC),所以他们会设置编译器来使用它,因此,编译器会抱怨您试图手动管理内存

解决方案:要么关闭ARC(我建议初学者这样做,因为您应该真正了解手动内存管理(MRC)是如何工作的!),要么将代码转换为与ARC兼容的,即。E删除所有
retain
release
autorelease
消息(并进行一些更改;您可以通过谷歌搜索
将Objective-C代码转换为ARC
)来了解这些消息)。您还可以使用Xcode将与MRC兼容的项目转换为与ARC兼容的项目。关于ARC的一般官方文件可在

要关闭ARC,您可以在Xcode中转到项目,然后在构建设置中,使用搜索栏搜索“自动”并关闭“自动引用计数”单元格


稍后,当您对MRC有了深入的了解后,您可以(并且被鼓励)切换到并学习ARC。

是的,听起来ARC已经启用了。因此,您可以(排序)忘记保留/发布/等。在大约2年内,将不会有任何非ARC代码遗留下来,因此在学习它时,除了学术原因之外,不会有任何其他原因。@HotLicks会的。我会写的。(说真的,你确实需要学习MRC。)对这个也一样——尽管它说的是相反的事情。尽管ARC是未来的潮流,但它在很大程度上取决于非ARC概念,最好通过关闭ARC和编码来学习,而不是仅仅阅读它们。这真是一个艰难的决定…@HotLicks是的,如果一个人不能理解C语言中的内存管理,你最好不要让那个人,即使是在AppStore附近。当然,ARC是现代技术,人们也应该学习它,但我个人还是更喜欢MRC。当然,理解C语言中的内存管理和理解Objective-C语言中的内存管理是两件截然不同的事情。理想情况下,一个人应该理解所有这些内容,但这里的大多数新手似乎都迫不及待地想学习所有内容,所以你必须挑选最适合个人的内容。@HotLicks如果一个人没有足够的耐心学习内存管理,他就不应该被允许制作iOS应用程序。这将减少大约80%的“下一个伟大的病毒式iPhone应用”用户。此外,这个问题与Xcode没有太大关系。如果您使用vi和make编写应用程序,编译器仍然会抛出错误。