2011-11-05 30 views
6

Các void (^)(void) cú pháp của 'hoàn thành' loại lập luận thực hiện theo phương pháp UIViewController:UIViewController dismissViewControllerAnimated kiểu lập luận hoàn thành cú pháp

- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion 

đã khơi gợi sự tò mò của tôi và tôi đã không thể tìm thấy bất kỳ tài liệu cho nó. Xin vui lòng ai đó có thể giúp giải thích mục đích/ý nghĩa của nó?

Rất cám ơn trước.

Trả lời

12

Dưới đây là các cuộc thảo luận của các khối từ cuốn sách của tôi:

http://www.apeth.com/iOSBook/ch03.html#_blocks

Có một ví dụ đó, nhưng đây là một ví dụ đó là gần gũi hơn với các loại điều bạn đang hỏi về:

[self transitionFromViewController:fromvc 
        toViewController:tovc 
          duration:0.4 
          options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:nil 
         completion:^(BOOL done){ 
          [tovc didMoveToParentViewController:self]; 
          [fromvc removeFromParentViewController]; 
         }]; 

Khối hoàn thành nhận một tham số, một BOOL được gọi là "xong", nhưng điều này không được sử dụng bởi mã của nó. Ý tưởng là hoạt ảnh được thực hiện và sau đó mã trong khối hoàn thành được chạy.

Điều rất quan trọng là phải thoải mái với các khối vì chúng là con đường của tương lai. Ví dụ, xem phim hoạt hình trong iOS 4 sử dụng chúng, như được giải thích trong "Block Dựa Xem Animation" của cuốn sách của tôi (đọc đầu tiên về cách thức cũ, sau đó đọc về iOS 4 mới chiều):

http://www.apeth.com/iOSBook/ch17.html#_view_animation

Trong các khối iOS 5 thậm chí còn quan trọng hơn; ngày càng có nhiều tình huống mà họ không phải là tùy chọn.

Các khối cũng là cách để sử dụng GCD (công văn lớn), đây là cách tốt nhất để thực hiện đa luồng.

+0

Cảm ơn bạn matt, trông giống như một cuốn sách tuyệt vời bạn đã viết, bất kỳ kế hoạch cho một phiên bản iOS 5 ?! –

+1

@Eddie: Tôi đã bắt đầu chuyển đổi tất cả các ví dụ có thể tải xuống xuống iOS 5: https://github.com/mattneub/Programming-iOS-4-Book-Examples/tree/master/convertedToIOS5 Thông tin khác để theo dõi ... – matt

3

Đó sẽ là một khối hoàn thành. Một khối là một đoạn mã có thể được gửi như một đối số (thường thấy, như ở đây, để xử lý hoàn thành) cho một API. Có rất nhiều tính năng của các khối, bao gồm khả năng tham chiếu bộ nhớ và duy trì trạng thái.

Xem tài liệu về tính năng này ngày càng phổ biến của obj-C: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Blocks cung cấp những gì có thể được coi là hành vi gọi lại (thường là đạt được với đoàn hoặc thông báo), nhưng họ cho phép các lập trình viên để bao gồm logic của hành vi hoàn thành trong bối cảnh tương tự như hành động khởi tạo, làm cho mã trở nên biểu cảm hơn và truyền đạt tiến trình hoàn chỉnh của hành vi dự định một cách chính xác.

+2

Bạn có thể muốn thêm rằng nó cực kỳ hữu ích để thực hiện bất kỳ dọn dẹp hoặc bắt đầu các hành động khác cần được thực hiện sau khi loại bỏ. Thường được sử dụng thay vì gọi lại của một đại biểu – timthetoolman

+0

Cảm ơn bạn isaac, tôi đã đọc ngắn gọn về các khối khi chúng được giới thiệu nhưng đã ngu ngốc không nhìn vào cú pháp! –

+0

@timthetoolman lời khuyên tốt. Tôi đã mở rộng câu trả lời để bao gồm so sánh với các cơ chế xử lý hoàn thành phổ biến khác trong ca cao. – isaac

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