Nếu tôi tuyên bố một khối như thế này ^{ DoSomething; }
và đặt nó trong một biến mẫu, tôi có cần phải Block_copy()
nếu tôi sẽ giữ nó xung quanh?Các khối Objective-C có được tự động phát hành không?
Trả lời
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.
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
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
@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'? –
- 1. Tự động phát hành và phát hành
- 2. Là một NSString bằng chữ được tự động phát hành hay không cần phải được phát hành?
- 3. Cách phát hành một khối
- 4. git: Tự động gắn thẻ các bản phát hành
- 5. Khối được phát hành trong khi ở NSDictionary (ARC)
- 6. Thẻ @since javadoc tự động cho các bản phát hành
- 7. Tôi có thể sớm phát hành một đối tượng tự động phát hiện không?
- 8. hành Octave -: hoạt động phát sóng tự động áp dụng
- 9. C# ThreadStaticAttribute đánh dấu các lĩnh vực được tự động phát hành khi thread chết?
- 10. Có thoát khỏi bộ nhớ được phát hành nhanh không?
- 11. Eclipse PDT có thể tự động thêm các khối PHPDoc vào mã khi cần thiết không?
- 12. Sự khác biệt giữa phát hành và tự động phát hành là gì?
- 13. Sự khác nhau giữa miễn phí, dealloc, phát hành và tự động phát hành là gì?
- 14. Trong ARC, các khối có được tự động sao chép khi được gán trực tiếp cho một ivar không?
- 15. Có cách nào để bọc một khối ObjectiveC vào con trỏ hàm?
- 16. Write khóa được phát hành mà không được tổ chức
- 17. Tự động phát hành hai lần một đối tượng
- 18. Tự động phát Youtube không hoạt động trên thiết bị di động có trình phát HTML5 được nhúng
- 19. Tự động hóa các hành động giả lập Blackberry 10
- 20. Angularjs phát hành $ http.get không hoạt động
- 21. Hành động tùy chỉnh của CanCan không hoạt động với các khối
- 22. Cách tạo video được nhúng không tự động phát
- 23. Video PDC 2009 có được phát hành không?
- 24. ASP.net không điền hành động = "" của mẫu máy chủ khi được phát hành
- 25. ObjectiveC loại không được nhập khẩu nhưng vẫn chạy mã
- 26. Phát hành mục tiêu C, tự động phát và loại dữ liệu
- 27. Tự động chia sẻ các hồ bơi trong Objective-C - phát hành chính AutoreleasePool?
- 28. IDisposable.Dispose() có được gọi tự động không?
- 29. Có thể gọi tự động được không?
- 30. NSObject được phát hành, NSString, NSArray không?
Lưu ý .. đối với ARC, một số mã ví dụ ở đây: http://stackoverflow.com/a/20760583/294884 – Fattie