int는 항상 0으로 초기화됩니까?
int
Objective-C에서 s가 항상 0으로 초기화되는 것을 계산하는 것이 안전 합니까?
보다 구체적으로, int
ivars가 있는 객체 가 새로 인스턴스화 되었을 때 해당 ivar의 값이 0이라고 가정하는 것이 안전합니까?
예, 클래스 인스턴스 변수는 항상 0으로 초기화 (되거나 nil
, NULL
또는 false
, 정확한 데이터 유형에 따라 다름). Objective-C 2.0 프로그래밍 언어를 참조하십시오 .
이
alloc
메서드는 새 개체의 인스턴스 변수에 메모리를 동적으로 할당하고 모두 0으로 초기화합니다.isa
즉, 새 인스턴스를 해당 클래스에 연결하는 변수는 제외 됩니다.
편집 2013-05-08
Apple은 위 문서를 제거 한 것 같습니다 (현재 The Wayback Machine에 연결됨). (현재) 활성 문서 Programming With Objective-C 에는 유사한 인용이 포함되어 있습니다.
이
alloc
메서드에는 객체 속성에 할당 된 메모리를 0으로 설정하여 정리하는 또 다른 중요한 작업이 있습니다. 이것은 이전에 저장된 모든 것의 가비지를 포함하는 메모리의 일반적인 문제를 피하지만 객체를 완전히 초기화하기에는 충분하지 않습니다.
그러나 이것은 클래스의 인스턴스 변수 에만 해당됩니다. 전역 범위에서 선언 된 POD 유형에 대해서도 마찬가지입니다.
// At global scope
int a_global_var; // guaranteed to be 0
NSString *a_global_string; // guaranteed to be nil
한 가지 예외는이다 하지 로컬 변수 또는 데이터 할당에 해당 malloc()
하거나 realloc()
; 할당 된 메모리를 명시 적으로 제로화 calloc()
하므로의 경우 참입니다 calloc()
.
한 가지 예외는 ARC (Automatic Reference Counting)가 활성화되면 Objective-C 객체에 대한 스택 포인터가 암시 적으로 다음으로 초기화된다는 것입니다 nil
. 그러나 명시 적으로 초기화하는 것이 nil
좋습니다. 로부터 ARC 릴리스 노트로 전환 :
스택 변수는 다음으로 초기화됩니다.
nil
ARC를 사용하면 strong, weak 및 autoreleasing 스택 변수가 이제 다음과 같이 암시 적으로 초기화됩니다.
nil
C ++ (및 Objective-C ++에서 사용되는 C ++ 개체)에서 클래스 인스턴스 변수도 0으로 초기화 되지 않습니다 . 생성자에서 명시 적으로 초기화해야합니다.
초기화를 위해 어떤 값도 가정해서는 안된다고 생각합니다. "0"값을 중심으로 논리를 작성하는 경우 확실하게 설정해야합니다.
예, C에서 전역 변수는 0으로 초기화됩니다. Objective-C에서는 로컬 변수도 0으로 초기화됩니다. 믿을 수 있습니다.
참고 URL : https://stackoverflow.com/questions/990817/are-ints-always-initialized-to-0
'Program Tip' 카테고리의 다른 글
INSERT INTO를 사용하여 여러 값 삽입 (SQL Server 2005) (0) | 2020.10.24 |
---|---|
C ++ 멤버 함수에서 "if (! this)"는 얼마나 나쁩니 까? (0) | 2020.10.24 |
간단한 예 (0) | 2020.10.24 |
GCD의 블록 내에 NSAutoreleasePool을 만들어야합니까? (0) | 2020.10.24 |
UTF-8 인코딩 문자의 최대 바이트 수는 얼마입니까? (0) | 2020.10.24 |