[ObjC] 윈도 + GNUStep + Clang 사용시 몇 가지 알아 둘 점

프로퍼티의 backing storage variable을 반드시 명시적으로 선언해야 함

말 그대로, 프로퍼티를 설정할 때 이 값이 담길 인스턴스 변수를 명시적으로 선언해야 한다. 옛날 iOS 관련 책을 보면 그런 식으로 코드가 되어있는데…

@interface Person : NSObject {
    NSString *firstName, *lastName;
}
@property (copy, nonatomic) NSString *firstName;
@property (copy, nonatomic) NSString *lastName;
@property (readonly) NSString *fullName;
@end

iOS4로 넘어오면서 부터인가 변수를 중괄호 안에 선언해 줄 필요가 없어졌다. 이는 Objective-C 런타임이 자동으로 변수를 선언해주기 때문인데, GNUStep의 런타임은 아직 구형이라 변수는 선언해줘야 한다. (컴파일러가 해주는 부분이 아니기 때문에, clang으로 컴파일해도 에러가 난다.)

ARC를 사용할 수 없다.

Clang을 사용하면 ARC에서 사용하는 @autoreleasepool 블럭을 사용할 수 있다. ARC 자체는 clang 컴파일러가 지원하는 것으로 알고 있는데 아마 Apple LLVM에서만 사용가능 한 듯 하다. 실제로 ARC 옵션을 주고 컴파일하려고하면 GNUSTEP을 사용하는 경우 이 런타임에서는 사용할 수 없다고 메시지가 출력된다.

블럭은 사용할 수 있다.

컴파일러가 clang 이라면 -fblocks 옵션을 사용하면 코드블럭을 사용할 수 있다. gcc 4.8.1에서도 왠지 코드 블럭은 동작하지 않는 것 같다. (아니면 옵션이 -fblocks가 아닐수도 있겠다.)