2

NSObject为什么在我没有导入类的情况下仍然允许使用函数并从类创建对象?

int main (int argc, char *argv[])  
{  
    @autoreleasepool {  
        NSLog(@"hi");
        NSArray *array = [NSArray arrayWithObject: @"hello"];
        NSLog(@"%@", array);
    }
    return 0;  
} 

输出

2012-08-11 22:15:33.854 prog[1282:403] hi
2012-08-11 22:15:33.857 prog[1282:403] (
    hello
)
4

2 回答 2

8

很可能您有一个导入 Foundation 的 Precompiled/Prefix 标头,因此 Foundation 会隐式添加到每个标头中。查找名为 *-Prefix.pch 的文件。Xcode 通常将它放在一个名为 Supporting Files 的组中。

于 2012-08-12T02:22:16.813 回答
0

我尝试通过clang使用命令行进行编译,但失败了。我认为 Xcode 做了一些有助于编译的事情。

% cat main.m  

int main (int argc, char *argv[])  
{  
    @autoreleasepool {  
        NSLog(@"hi");
        NSArray *array = [NSArray arrayWithObject: @"hello"];
        NSLog(@"%@", array);
    }
    return 0;  
} 

% clang main.m

main.m:4:9: warning: implicit declaration of function 'NSLog' is invalid in C99
      [-Wimplicit-function-declaration]
        NSLog(@"hi");
        ^
main.m:5:9: error: use of undeclared identifier 'NSArray'
        NSArray *array = [NSArray arrayWithObject: @"hello"];
        ^
main.m:5:18: error: use of undeclared identifier 'array'
        NSArray *array = [NSArray arrayWithObject: @"hello"];
                 ^
main.m:5:27: error: use of undeclared identifier 'NSArray'
        NSArray *array = [NSArray arrayWithObject: @"hello"];
                          ^
main.m:6:22: error: use of undeclared identifier 'array'
        NSLog(@"%@", array);
                     ^
1 warning and 4 errors generated.
于 2012-08-12T04:52:51.987 回答