2012-08-12 1 views
2

NSObject 클래스를 가져 오지 않은데도 함수를 사용하고 객체를 만들 수있는 이유는 무엇입니까?Foundation을 가져 오지 않고도 여전히 작동하는 이유는 무엇입니까?

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 
) 

답변

8

가능성이 높습니다. * -Prefix.pch라는 파일을 찾습니다. 일반적으로 Xcode는이를 Supporting Files라는 그룹에 넣습니다.

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.