Languages/Objective-C2009.12.30 20:05
Objective-C에서는 클래스 변수의 개념을 명시적으로 지원하지 않습니다. Java 같으면 다음과 같이 할 수 있었겠죠.

public class MyClass {
  static int INSTANCE_COUNT = 0;
  //...
}

하지만 Objective-C에서는 그렇게 할 수 없기 때문에, static 변수를 사용한 편법을 써야 합니다. C/C++에서 static 키워드는 다음과 같은 효과를 갖습니다.

1. 함수 안에서 static으로 선언된 변수의 lifetime은 그 함수가 최초로 사용된 시점부터 프로그램이 종료될 때 까지로 연장된다.

2. 함수 외부에서 static으로 선언된 변수의 scope는 그 변수가 사용된 파일 내부로 한정된다.

따라서 2번 규칙을 사용하면 비슷한 효과를 얻을 수 있습니다.

다음 예제를 한번 보시죠.

// MyClass.h

@interface MyClass : NSObject {
}

+ (MyClass*) myClassFactory;

+ (int) count;

- (id) init;

@end

// MyClass.m

@implementation MyClass

static int INSTANCE_COUNT = 0;

+ (MyClass*) myClassFactory {
  ++INSTANCE_COUNT;
  return [[[MyClass alloc] init] autorelease];
}

+ (int) count {
  return INSTANCE_COUNT;
}

- (id) init {
  if ( self = [super init] ) {
    // ...
  }
  return self;
}

@end

- - -

삽질의 길은 언제나 멀고도 험하다는...
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 비밀댓글입니다

    2010.01.04 21:19 [ ADDR : EDIT/ DEL : REPLY ]