2011-12-19 3 views

답변

38

nil을 전달하는 코드가 해당 코드를 블록으로 호출하지 않을 것이라는 점을 믿어도 괜찮습니다.

빠른 데모 : 내부 코드는 첫 번째 블록 확인해야합니다

typedef void (^GenericBlock)(void); 

void useThisBlock(GenericBlock block){ 
    block(); 
} 

useThisBlock(^{NSLog(@"All okay.");}); 
useThisBlock(nil); // Compiles but crashes 

: UIKit 코드의 경우 if(block) block();

, 당신은 괜찮을 것이다.

+2

"* UIKit 코드의 경우 괜찮을 것입니다. *"인용이 필요합니까? – Manav

+0

@Manav : 당신이 잘못한 것은 아닙니다. - 확인할 방법이 없습니다 (충돌하지 않는 것을 제외하고). –

6

nil을 전달하면 문제가 없으며 제 의견으로는 더 깨끗한 코드가됩니다.

완료 블록을 사용하지 않으려는 경우이 경우 [UIView animateWithDuration:animations:] 메서드를 사용할 수도 있습니다.

+0

감사합니다. 애니메이션 블록이없는 메소드가 있다는 것을 알고 있습니다. 제 질문은 블록 그 자체에 관한 것입니다. 왜'NULL '이 아닌'nil'이 아닌가? – pixelfreak

+0

'nil'과'NULL'은 동일합니다. 관습 적으로 Objective-C는 일반적으로 ARC에서 정확하지 않은'NULL '이 C. – sho

+10

에 사용되는 경우'nil'을 사용합니다. 'nil'은 객체를 의미하며'id'가 예상되는 곳에서 사용되어야하며'NULL'은 객체가 아닌 유효하지 않은 포인터를 의미하며'(void *)'가 예상되는 곳에 사용해야합니다. 자세한 내용은 [this] (http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c) 질문을보십시오. –

관련 문제