2012-12-16 2 views
0

나는 시도해 본 결과, id 변수에 블록을 성공적으로 할당했다. 블록이 obj-c 객체입니까? 왜 우리는 nil 대신 NULL을 사용합니까? (객체 인 경우)Objective-C objects & blocks

답변

2

블록은 Objective-C 컨텍스트에서 객체로 사용할 수 있습니다. 즉 GCC 또는 LLVM으로 컴파일 된 순수 C 또는 C++ 프로그램은 블록을 사용할 수도 있지만 블록을 사용할 수는 없습니다. 객체로 사용할 수도 언어는 의미있는 방식으로 목표 - C를 이해하기 때문이다.)

일반적으로, 당신은 Class ES 및 기타 포인터에 대한 NULL에 대한 객체 nil, Nil를 사용해야합니다. 나는 당신이 누가 블록을 위해 nil 대신에 NULL을 사용하고 있는지 알지 못한다. 그러나 이것은 Objective-C 컨텍스트에서 할 수있는 것이 아니다. (이전처럼 C 나 C++ 컨텍스트에서 nilNil은 사용할 수 없다. Objective-C 런타임 헤더를 가져 오면 거기에서 NULL을 사용할 것입니다.)

+0

모든 예제 또는 샘플 코드에서 NULL이 표시됩니다. –

+0

? 나는 항상 'nil'을 사용했습니다. – jrtc27

+0

NULL, nil, 0 - Objective-C에서 모두 똑같습니다. – rmaddy

2

C 블록의 멋진 기능은 기본 Obj-C 오브젝트처럼 작동 할 수 있다는 것입니다. 블록을 id으로 전송할 수 있습니다. 당신은 'copy', 'retain', 'release', 'autorelease'와 같은 블록 Obj-C 메시지를 보낼 수 있습니다. NSArray 또는 NSDictionary에 블록을 채울 수 있습니다. 그러나 블록을 실행할 시간이 왔으면 원래 유형으로 다시 캐스팅해야합니다.

NULL, nil, Nil 및 0은 0에 대해 서로 다른 단어입니다. 다른 하나를 선택하는 것은 동료 프로그래머를위한 문서 일뿐입니다. 그것은 컴파일러와 차이를 만듭니다.

일반적으로 NULL은 null C 포인터를 나타내고 nil은 null Obj-C 개체를 나타냅니다. 블록이이 두 가지이기 때문에 동료 프로그래머는 널 블록을 나타 내기 위해 NULL 또는 nil을 선택하는 것에 대해 조롱하지 않습니다. 그리고 컴파일러는 확실히 신경 쓰지 않을 것입니다.