Khi tôi nghĩ về ARC không có phí phát hành.
Tôi giả sử bạn có nghĩa là "Tôi không phải lo lắng về việc phát hành". Thường có một số chi phí hoạt động, mặc dù trình biên dịch đôi khi có thể tối ưu hóa nó.
Mặc dù quy tắc ARC khác nhau cho cả NS .. và CF .., có lý do cụ thể nào không hỗ trợ CF .. trong ARC không?
Nhiều đối tượng nền tảng chính là do ARC quản lý và số lượng tiếp tục tăng. Bạn có thể biết liệu một hàm cụ thể có hỗ trợ ARC hay không bằng cách tìm kiếm tiêu đề cho CF_IMPLICIT_BRIDGING_ENABLED
. Nếu bạn thấy điều đó, thì các hàm trả về các đối tượng CF tương thích ARC. Trong iOS 8, ví dụ, nhiều chức năng đồ họa cốt lõi đã được thêm vào danh sách. (Tôi không muốn nhấn mạnh điều này, tôi không nói rằng hôm nay bạn không có ngày hôm nay CFRelease
trên những điều này. Tôi nói rằng chúng được thiết lập để được quản lý bởi ARC, chúng được quản lý bởi ARC trong Swift và họ có thể cuối cùng được xử lý trực tiếp trong ObjC mà không cần CFRelease
.)
lý do đối tượng CF không theo mặc định quản lý là ai đó đã phải trải qua và xác minh (kiểm toán) mà mỗi chức năng phù hợp với Tạo Quy ước đặt tên quy tắc hoặc chúng được chú thích chính xác cho các ngoại lệ của chúng. Đó là công việc khá tẻ nhạt, và Apple đã phát tán nó ra nhiều bản phát hành. Nhưng bạn sẽ thấy điều này trở nên tốt hơn và tốt hơn theo thời gian.
Kazuki đúng là bạn không thể đặt đối tượng được ARC quản lý trong cấu trúc hoặc liên kết, nhưng điều đó thường không ảnh hưởng đến Core Foundation.
BTW, CF_IMPLICIT_BRIDGING_ENABLED
chỉ là một trình bao bọc xung quanh arc_cf_code_audited
clrag pragma. Điều này được giải thích trong tài liệu ARC, 7.8.1 Auditing of C retainable pointer interfaces.
Nguồn
2014-09-24 22:29:04
Tôi biết tại sao nhưng không ** TẠI SAO ** nếu điều đó có ý nghĩa. CF là một khung công tác C có sẵn cho iOS và OS X và trình biên dịch ARC không thể theo dõi phân bổ bộ nhớ trong đó. Đây là lý do tại sao bạn cần phải tự phát hành nội dung. Nhưng tôi không biết ** TẠI SAO ** ARC không thể theo dõi. Có nói rằng, đây là một phần của lý do mà Swift đến cùng. Nó loại bỏ sự cần thiết cho các công cụ C hoàn toàn. :) – Fogmeister
@Fogmeister: Đồng ý, nhưng CF không được nhập vì nó là từ C? nếu không phải lý do tại sao không được sửa đổi để đáp ứng yêu cầu? – preetam