ObjectiveUs C关于GNUstep AutoReleasePool未声明的问题

g.r*_*ion 1 memory-management compiler-errors objective-c autorelease gnustep

我是Objective-C的新手,在GNUstep和MinGW环境中工作.我正在编译此代码,但有一个错误:

#import "Foundation/Foundation.h"

@interface C : NSObject
{
    float f;
}

- (void) gamerHell: (NSString *) name : (NSString *) lastName ;

@end

@implementation C

- (void) gamerHell: (NSString *) firstName : (NSString *) lastName {

    NSLog(@"Welcome, %s %s",firstName,lastName);
}

@end

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

    NSAutoReleasePool * pool = [[NSAutoReleasePool alloc] init];

    C *ob = [[C alloc] init];
    [ob gamerHell: @"SHAN" : @"UL HAQ"];

    [ob release];

    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了这样的编译时错误:

'NSAutoReleasePool'未声明(首次使用此功能)

我该怎么做才能克服这个错误?

Ada*_*eld 6

尝试使用NSAutoreleasePool而不是NSAutoReleasePool(使用小写r).

  • 另外,Foundation标头应该用尖括号而不是双引号导入为<Foundation/Foundation.h>. (2认同)

Qui*_*lor 6

亚当指出你报告的问题,你的班级名字中有一个拼写错误.但是,您还会遇到一些其他问题,我认为这有助于您了解这些问题.

  • 您的方法违反了几个Objective-C约定,这些约定将使您的代码不易读取,并使试图帮助您的人感到困惑,即:
    • 匿名选择器片段永远不是一个好主意.始终在每个冒号前使用描述性名称.
    • 更好的签名是 - (void) hellowWithFirstName:(NSString*)firstName lastName:(NSString*)lastName;
    • 我强烈建议在方法声明和定义中使用相同的形式参数名称.(您在一个中使用"name",在另一个中使用"firstName".)如果您选择以不同方式命名它们,请确保头文件中的一个经过深思熟虑,因为这是人们将编码的公共接口.
  • 我假设你选择了比"C"更好的类名,并且刚刚将它用作占位符以用于演示目的.对类命名要特别小心,因为Objective-C没有"唯一"类的包或命名空间.

我知道你是Objective-C的新手,这些都是人们学习语言的常见问题.因此,请把这些观点作为友好的建议,而不是严厉的批评.