2011-12-19 49 views

Trả lời

38

Điều này được chấp nhận miễn là bạn có thể tin tưởng mã mà bạn đang chuyển qua nil sẽ không cố gắng gọi nó là một khối.

Một cuộc biểu tình nhanh chóng:

typedef void (^GenericBlock)(void); 

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

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

Mã bên phải kiểm tra khối đầu tiên: if(block) block();

Trong trường hợp của mã UIKit, bạn cần sử dụng tốt.

+2

"* Trong trường hợp mã UIKit, bạn nên ổn. *" Trích dẫn cần thiết? – Manav

+0

@Manav: Bạn không sai - không có cách nào để xác minh (ngoại trừ việc nó không bị lỗi). –

6

Đi qua nil là tốt và theo ý kiến ​​của tôi, hãy đọc mã đọc rõ hơn.

Nếu bạn không muốn sử dụng khối hoàn thành, trong trường hợp này bạn cũng có thể sử dụng phương pháp [UIView animateWithDuration:animations:].

+0

Cảm ơn, tôi biết có một phương pháp không có khối hoạt ảnh. Câu hỏi của tôi là nhiều hơn về chính nó. Vậy tại sao 'nil', không phải' NULL'? – pixelfreak

+0

'nil' và' NULL' là tương đương. Theo quy ước, Objective-C thường sử dụng 'nil' trong đó' NULL' được sử dụng trong C. – sho

+10

không chính xác trong ARC. 'nil' có nghĩa là đối tượng và phải được sử dụng khi' id' được mong đợi, trong khi 'NULL' có nghĩa là con trỏ không hợp lệ không phải là đối tượng và phải được sử dụng khi' (void *) 'được mong đợi. Hãy xem câu hỏi [this] (http://stackoverflow.com/questions/557582/null-vs-nil-in-objective-c) để biết thêm thông tin. –

Các vấn đề liên quan