为什么没有导入基金会仍然有效?

时间:2012-08-12 02:18:17

标签: objective-c nsobject

当我没有导入时,为什么我仍然可以使用函数并从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
)

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分: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.