2009-06-15 2 views
10

는 점에서, C처럼 행동 오브젝티브 -c 않습니다 즉 :ObjectiveC에서 클래스 인스턴스 변수가 'nil'로 초기화 된 포인터입니까? 그렇지 않으면? 당신이 포인터 등을 만들 경우

NSString* c; 

무기 호에 C 점을 하는가, 또는 예약 된 메모리 영역에서 임의의 값?

즉, 포인터가 사전 초기화 되었습니까? 아니면 직접해야합니까? 앞에서 말한 것처럼 이것이 C/C++의 경우는 아니지만 ObjC 마법이 있는지 아닌지 궁금합니다. 목표 - C에서

답변

13

클래스 인스턴스 변수들은 빈 값 (0, 전무 등)

+0

Brilliant - cheers. 불행히도, 그건 내 버그가 내가 생각했던 곳이 아니란 것을 의미합니다. – Chaos

+0

특히 클래스의 메모리 공간은 할당 될 때 0입니다. 메서드 또는 함수의 포인터는 C에서와 똑같이 작동합니다. – Chuck

1

그들은 전무, 그리고 당신이 테스트를 통해 예를 들어,이 가정 할 수 있습니다으로 초기화를 보장합니다 :

if (nil == myVariableIHaventInitialisedYet) 
{ 
    myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove]; 
} 
+0

좋은 yoda 코드! – toxaq

3

클래스 인스턴스 변수와 정적/전역 변수는 적절하게 nil/NULL/0/false로 초기화됩니다.

그러나 로컬 변수는 초기화되지 않습니다.

0

여기에 로컬 변수가 있는지 확인하십시오. 그것들은 nil로 초기화되지 않기 때문에 선언문에서 초기화하지 않을 경우 init'd가 사용되었는지 확인하십시오. 베드로가 말했듯이, 클래스, 인스턴스 및 정적은 초기화되지 않으므로 걱정할 필요가 없습니다.

일반적으로 문제는 없지만 특히 전달 된 포인터 참조 (예 : NSError **)를 사용하여 호출이 달라집니다.

관련 문제