2012-05-01 34 views
5

Tại sao việc đúc một CGImageRef thành một con trỏ đối tượng không yêu cầu thông tin quản lý bộ nhớ (__bridge, v.v.)? Ví dụ, nếu ảnh là loại UIImage *, và lớp là lớp của một UIView cơ bản, sau đó các dòng mã sau đây không gợi ra bất kỳ khiếu nại từ các trình biên dịch:tại sao dàn diễn viên này không yêu cầu chuyển tiếp theo ARC?

layer.content = (id)[image CGImage]; 

Trả lời

6

Để báo Transitioning to ARC Release Notes:

Các trình biên dịch Xử lý CF Đối tượng trở về từ phương pháp Cocoa

Trình biên dịch hiểu phương pháp Objective-C trở lõi Foundation loại theo quy ước đặt tên Ca cao lịch sử (see Advanced Memory Management Programming Guide). Ví dụ, trình biên dịch biết rằng, trong iOS, CGColor được trả về bằng phương thức CGColor của UIColor là không thuộc sở hữu. Bạn vẫn phải sử dụng dàn diễn viên kiểu thích hợp, như minh họa theo ví dụ này ...

(OK, không hoàn toàn liên lạc cacao, nhưng này!).

Bởi vì CGImage trả về đối tượng CoreFoundation, không yêu cầu phải có dàn diễn viên __bridge.

+1

Một công ty lớn hơn đã từng yêu cầu tôi tham gia nhóm "Chỉ có ca cao" di động của mình ... Có vẻ như không ai thực sự quan tâm đến sự khác biệt 'cacao' và 'cacao' và chỉ gọi mọi thứ là Cocoa (thậm chí ObjC), một sự xấu hổ mặc dù điều này dường như cũng xảy ra ở Apple. – JustSid

+0

Vì vậy, nếu tôi hiểu chính xác, ARC không xử lý các đối tượng CF ngoại trừ các đối tượng được trả về bởi một phương thức Cocoa? – Inept

+1

@JustSid * i * care =) – justin

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