2011-12-19 14 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は通常、 'NULL 'がCで使用されている' nil'を使用します。 – sho

+10

これはARCでは正確ではありません。 'nil'はオブジェクトを意味し、' id'が期待されるところで使用されなければならず、 'NULL'は非オブジェクト非有効ポインタを意味し、'(void *) 'が期待される場所で使わなければなりません。詳細については、[this](http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c)の質問をご覧ください。 –

関連する問題