- 2단계 생성
Objective-C 에서 객체를 생성하기 위해서는 메모리를 할당하는 +alloc과 객체의 초기화를 위한 -init을 순차적으로 호출해서 메모리를 할당한후 초기화를 해 주어야 하는데 이를 2단계 생성이라 한다. 메모리 할당과 초기화를 분리함으로써 메모리 할당 방식에 신경쓰지 않고 초기화 메서드를 구현할 수 있고 메모리할당 방식과 초기화 방법에 따른 다양한 조합에 대해 생성자를 만들지 않아도 되는 장점이 있다.

- Zone
운영체제는 사용중인 데이터와 그  주변에 있는 데이터는 함께 사용될 확율이 높기때문에 (공간적 지역성) 하드디스크에 있는 데이터를 메모리에 복사할때 그 주변의 데이터도 함께 메모리에 복사한다. 코코아에서는 객체에 필요한 메모리공간을 존으로 묶어 근처에 할당함으로써 운영체제에 의해 메모리에 복사될때 함께 복사되어 애플리케이션의 성능을 높인다.
Zone을 명시적으로 사용할 수 있는 +allocWithZone: 가 존재하지만 애플에서는 권장하지 않는다.

- 초기화
객체를 초기화 하기위해서 -init을 호출하거나 [super init]을 호출하여 NSObject의 -init (모든 클래스의 최상위 클래스는 NSObject이다.)을 호출하도록 지정한 새로운 초기화메서드를 이용하여 초기화 할 수 있다. 새롭게 만든 초기화 메서드는 다양한 이름으로 만들수 있지만 init으로 시작할 것을 권장하며 (다른 이름을 사용하는것에 따른 다른 개발자들과의 커뮤니케이션문제를 생각하면 init으로 시작해야한다.) 매개변수를 추가하여 인스턴스 변수에 초기값을 할당할 수 있다.  인스턴스 변수의 초기화를 위해 지정된 초기화함수를 만드는 것이 좋다.
지정된 초기화 함수는 대체로 매개변수가 가장 많은 초기화 함수인데 그이유는 다음을 보면 알 수 있다.
- ( id) initWithX:(CGFloat)x y:(CGFloat)y width:(CGFloat)width height:(CGFloat)height{
     self = [super init];
     if(self){
        self.x = x;
        self.y = y;
        self.width = width;
        self.height = height; 
    }
}
- (id)initWithX:(CGFloat)x y:(CGFloat)y{
 self = [self initWithX:x y:y width:100 height:100];
 return self;
}

위에 사각형을 그리기 위한 객체의 초기화 메서드들이 지정되어 있다.보통은 CGRect나 CGPoint와 CGSize를 이용하여 구현하겠지만 설명을 위한 것이니 그 부분은 넘어가자.
-initWithX:y:width:height:라는 초기화 메서드에서 모든 변수를 초기화 하도록 지정되어 있고
-initWithX:y:에서는 -initWithX:y:width:height를 호출하여 x와 y는 초기화메서드의 매개변수로 크기는 지정된 값으로 초기화 하도록 하고 있다. initWithX:y:에서 직접 [super init]을 선언하고 인스턴스 변수를 초기화 할 수 도 있지만 지정된 초기화 메서드를 사용하면 초기화와 관련된 변경사항은 지정된 초기화 메서드만 수정하면 됨으로 관리도 간편해지며 모든 인스턴스변수들을 초기화 함으로써 인스턴스변수가 NULL값을 가짐으로써 생길 수 있는 문제들을 미연에 방지할 수 있다는 장점이 있다.

- 메모리 해제
가비지 컬렉션을 사용하지 않는 다면 -dealloc에서 인스턴스 변수에 할당한 메모리를 해제해 주어야 한다. -dealloc은 객체가 소멸할때 자동으로 호출되는 메소드로 직접호출해서는 안된다.

- (void)dealloc
{
    [label release];
    [super dealloc];
}

-release를 이용해 retainCount를 줄인후 super의 -dealloc을 호출한다.
2011/10/22 23:35 2011/10/22 23:35

trackback url: http://jeonglim.net/blog/trackback/79

1 2 3 4 5 6 7 ... 69