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 に答える