2009-12-02 4 views
2

메모리를 할당하는 것 외에도 alloc은 모든 인스턴스 변수 (예 : isa 변수 제외)를 0 또는 동등한 유형 인 0으로 설정합니다. nil, NULLalloc/init 및 인스턴스 변수 설정

0.0.하지만 최근 대한 init:

초기화 다음 읽기는 합리적이고 유용한 초기 값으로 인스턴스를 객체의 변수를 설정합니다.

나는 init 어떤 방법으로이 값을 변경하고,

alloc 경우 이미 제로에 값을 설정하고있다 .... "초기 값을 합리적이고 유용한"가 무엇을 의미하는지에 관해서 조금 혼란 스러워요?

답변

3

, 어떠한 방식으로이 값을 변경 init을인가?

확실히.

예를 들어 폭과 높이를 나타내는 사각형이있는 직사각형을 나타내는 개체가있을 수 있습니다. init에서 이러한 ivars를 기본 설정 인 300x200으로 초기화 할 수 있습니다.

그게 전부입니다.

NSObject의 -init 메서드가 하위 클래스의 ivars 값을 0이 아닌 값으로 초기화하는지 묻는다면 물론 대답은 no입니다.

+0

그래서 내가 읽은 견적은 NSObject의 --init가 아닌 * 편의 * 초기화자를 나타냅니다. 정확히 알고 싶습니다 ... 감사합니다! – ChrisR

0

예, 전적으로 가능합니다. 예를 들어, 데이터 구조에는 동적 메모리가 할당되고 초기화되어야하는 멤버 변수가있을 수 있습니다. alloc 호출은 멤버 변수를위한 공간을 예약 할 것이고, init 호출은 그 값들을 유용하게 만들 것입니다 (예를 들어, 하위 할당 & 초기화).

allocinit은 서로 다른 방식으로 개체를 초기화하는 클래스에 대해 init 루틴을 여러 개 가질 수 있기 때문에 별도입니다.

new으로 전화하여 allocinit을 동시에 호출 할 수도 있습니다. 따라서 다음 두 행은 동일 ALLOC 이미 값을 제로로 설정 한 경우

[[NSObject alloc] init]; 
[NSObject new];