2011-12-19 12 views

cevap

38

nil'u geçtiğiniz kodun blok olarak çağırmayacağına güvenebiliyorsanız bu tamamdır.

Hızlı bir gösteri: iç kod ilk bloğunu kontrol etmeli

typedef void (^GenericBlock)(void); 

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

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

: UIKit kodu durumunda if(block) block();

, ince olmalıdır.

+2

"* UIKit kodu olması durumunda, iyi olmalısınız. *" Atıflar gerekli mi? – Manav

+0

@Manav: Yanlış değilsin - Doğrulamanın bir yolu yok (çarpma durumu hariç). –

6

nil geçişi iyidir ve bence temizleyici okuma kodu verir.

Bir doldurma bloğu kullanmak istemiyorsanız, bu durumda [UIView animateWithDuration:animations:] yöntemini de kullanabilirsiniz.

+0

Teşekkürler, Animasyon bloğu olmayan bir yöntem olduğunu biliyorum. Benim sorum bloğun kendisi hakkında daha fazla. Öyleyse neden "NULL" değil? – pixelfreak

+0

'nil' ve' NULL' eşdeğerdir. Konvansiyonel olarak, Objective-C tipik olarak, 'NULL''nın N1'de kullanıldığı ve ARC’de tam olarak doğru olmadığını 0 – sho

+10

kullanır. 'nil' nesne anlamına gelir ve' id'nın beklendiği yerde kullanılmalıdır, '' NULL '' nesne olmayan geçerli olmayan bir işaretçi anlamına gelir ve '(void *)' beklendiği yerde kullanılmalıdır. Daha fazla bilgi için [this] (http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c) adresine bakınız. –

İlgili konular