Tag Archives: 객체

[iPhone] Object-C : Allocating and Initializing Objects

Object-C에서 객체를 생성하는 방법은 다음의 두가지 방법을 거쳐야 합니다.

  • 동적으로 새로운 객체를 메모리에 할당
  • 새롭게 메모리에 할당된 객체에 적절한 값들로 초기화

위의 두가지 과정을 거치게 되면 완벽한 객체가 생성되게 됩니다.

위의 두가지 과정을 다음과 같이 한줄의 코드로 표현할 수 있습니다.
[code]id anObject = [[Rectangle alloc] init];[/code]

Object-C에서 새로운 객체를 메모리에 할당하는 Class Method는 NSObject 클래스에 정의되어있습니다.

이 클래스는 Java의 Object클래스와 같이 모든 클래스가 상속받게 되는 최상위 클래스입니다.

NSObject 에서는 alloc, allocWithZone 두가지 주요 메서드가 있습니다.

이 메서드들은 클래스를 포함한 클래스내의 인스턴스 변수들이 사용될 수 있도록 충분한 메모리 공간을 할당하여 주는 역할을 합니다.

alloc과 allocWithZone 메서드들은 자신의 클래스에 새로운 메모리 영역을 할당하고 새롭게 생성되는 인스턴스 변수가 이 객체를 가르키도록 합니다.(Pointer)

그리고 모든 다른 인스턴스 변수들의 값을 0으로 세팅합니다.

일반적으로 객체가 안전하게 사용될 수 있도록 값을 초기화 하는 과정이라고 보시면 됩니다.

초기화를 담당하는 인스턴스 메서드들은 모드 init으로 시작을 하는 명칭을 가지고 있습니다.

이 이름은 강제적인것은 아니지만 코드 컨벤션에 지정된 내용입니다. 따로 인자가 없는 초기화 메서드는 init을 사용하면 되고 인자가 필요한 초기화 메서드일 경우 initWithFrame: 와 같은 메서드명을 사용하면 될것입니다.

모든 클래스에서 init 메서드를 제공하여야 합니다. 또한 이 메서드를 통해 클래스를 초기화 하도록 하는것이 좋습니다.

NSObject의 경우 변수와 각종 정의를 init메서드 내부에서 초기화 하도록 구현되어있습니다.

NSObject의 init메서드를 호출할경우 객체의 모든 내용을 초기화 하고 self(C++/Java에서 말하는 this)를 반환하게 됩니다.