티스토리 뷰

IOS

클래스 오브젝트 초기화

Vincent.seo 2017. 3. 29. 16:39

클래스 오브젝트 초기화

오브젝트를 생성하기 위해서  메모리할당(alloc) 과 초기화(init)라는 두 단계를 거쳐야 한다.

메모리할당: 오브젝트가 사용할 메모리를 힙에서 할당 받는다.

초기화: 오브젝트에 필요한 초기 값을 채워준 다음 그 메모리 주소에 대한 포인터를 반환한다.


Foo* myFoo = [[Foo alloc] init];


메모리 할당(Alloc):

NSObject 클레스에서 상속받은 클래스메소드 alloc으로 한다. 아래는 동작 방식:

1. alloc은 새로운 오브젝트를 위한 메모리를 할당하고 그 주소를 가리키는 포인터를 반환.

2. 컴파일러는 모든 오브젝트 인스턴스에 대해 isa라는 이름의 인스턴스 변수를 자동생성하고  alloc은 이 변수의 내용을 채운다. isa는 오브젝트의 클래스 구조에 대한 포인터이다.

3. isa를 제외한 나머지 오브젝트의 내용은 0으로 채운다.

4. 생성된 오브젝트의 레퍼런스 카운터 값을 1로 셋팅한다.


allocWithZone

MAC OS X는 힙 영역을 동적으로 할당하는 소위 malloc 구역으로 나눈다. alloc은 allocWithZone:nil 로 구현되어 있는데 인수 nil은 allocWithZone: 으로 하여금 기본 malloc구역에 할당 하도록 한다. 기본 malloc구역 대신 별도의  malloc 구역을 사용하는 것은 아주 특별한 기술을 요하며 몇몇 경우에는 문제를 일으키기도 함으로 Apple에서는 alloc 을 사용 할 것을 권고하고 있다.


초기화(Init)

초기화 메소드는 init으로 시작하는것을 원칙으로 하고 있다.(강제성은 없음)

초기화가 필요없는 클래스를 디자인 한다면 NSObject에서 상속받은 init을 사용하면 된다. 이것은 self를 반환 하는것 외에 별로 하는일이 없다.


init의 구조

- (id) init

{

if (self = [super init])

{

//클래스에서 별도로 필요로 하는 초기화

}

return self;

}


인수를 사용하는 초기화

모든 클래스는 하나의 지정된 초기화 메소드를 가지고 있어야 한다. 지정된 초기화 메소드는 하나의 인스턴스를 완전히 초기화시켜주는 메소드이다.

만약 초기화 하는데 인수가 필요하지 않다면 지정된 초기화 메소드는 init이 된다.


TeeShirt 클래스의 인수를 사용하는 초기화 메소드(아래는 지정된 초기화 메소드이다)

-(id) initWithShirSize:(NSUInteger) inShirtSize

{

if(self = [super init])

{

shirtSize = inShirtSize;

}

return self;

}


클래스의 초기화 메소드를 설계할때 두가지 꼭 지켜야 할 규칙

1. 클래스의 나머지 초기화 메소드는 최종적으로(수퍼클래스가 아닌) 클래스의 지정 된 초기화 메소드를 호출해야 한다.

2. 클래스의 지정된 초기화 메소드는 반드시 수퍼클래스의 지정된 초기화 메소드를 호출해야 한다.(지정된 초기화 메소드는 수퍼클래스의 지정된 초기화 메소드를 호출 할 수 있는 유일한 초기화 메소드이다.)


만약 클래스의 지정된 초기화 메소드가 init이 아닌 인수를 가지고 있으면, 반드시 init메소드를 오버라이드 하여 수퍼클래스의 init을 호출 하도록 해야 한다.

'IOS' 카테고리의 다른 글

레이아웃 - 스크롤뷰의 컨텐츠 추가 삭제 하기  (0) 2018.08.28
IOS 스레드 제어  (0) 2018.08.28
PDF 파일 생성 및 저장(UIView를 이용)  (1) 2018.03.29
Property  (0) 2018.03.14
@Property, @Synthesize, @Dynamic  (0) 2017.03.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함