가장 기본적인 클래스인 NSObject에서는 init이라는 메서드를 제공하며 클래스를 초기화 하여 준다.
그러나 경우에 따라 다양한 초기화 메서드가 존재하는 것을 볼 수 있다. 가령 NSString의 경우 initWithFormat를 제공한다.
이는 초기화와 동시에 어떤 값을 같이 설정하게 해준다.
어떤 클래스에 이와 비슷한 이름(가독성을 높이고자 대부분의 초기화 메서드는 앞에 init을 붙이고 있다)을 설정하고 필요한 값을 전달할 수 있게 한다.
아래는 어떤 클래스를 만들고 초기화 시에 2개의 정수를 받는 초기화 메서드이다.
-(MyClass *) initWith:(int) a :(int) b
{
/*
이 클래스의 상위 클래스에서 init메시지를 전달함으로 기본적인 초기화 기능을 수행한다.
*/
[super init];
/*
만약 초기화에 성공하여 메모리상에 존재하게되면..즉 self가 존재하게 하면
그 self에 값을 받는 값으로 초기화 한다.
*/
num1 = a;
num2 = b;
/* 초기화 메서드는 메모리상의 객체를 바꾸거나 이동 시킬 수 있는 권한이 있기 때문에 반환값을 self에 할당해 주어야 한다. */
return self;
}
이 클래스를 생성하고 초기화 시에 initwith::를 실행하여 필요한 값을 대입한다.
이 처럼 필요한 경우 초기화 메서드를 개량하여 기능을 정해주면 된다. 다만 반드시 내부에서 실제 수행할 초기화 메서드인 init을 한 번 호출해 주면 된다.