2011-01-12 16 views

Trả lời

10

Có, bạn cần phải sao chép. Không phải vì chúng được tự động phát hành, mà bởi vì chúng bắt đầu trên stack. Lưu ý rằng khối cũng hành xử giống như đối tượng Objective-C thường xuyên, do đó bạn có thể sao chép chúng bằng cách sử dụng thường xuyên copy nhắn:

void storeBlockForLater: (dispatch_block_t) block 
{ 
    [someArray addObject:[[block copy] autorelease]]; 
} 

Hoặc, nếu bạn có một tài sản khối:

@property(copy) dispatch_block_t block; 

Giữ lại không giúp đỡ ở đây.

+2

Cảm ơn, tôi cũng đã tìm thấy bài viết tuyệt vời này về chủ đề: http://cocoawithlove.com/2009 /10/how-blocks-are-implemented-and.html – brian

+1

Yup; và nếu bạn sử dụng 'copy', sử dụng' release'. Nếu bạn sử dụng 'Block_copy()', sử dụng 'Block_release()'. Đừng trộn chúng. – bbum

+0

@bbum Có an toàn khi sử dụng 'Block_copy()' và 'autorelease' không? Bạn chỉ nên sử dụng 'autorelease' với' copy'? –

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