7

Các mã sau biên dịch tốt với quản lý bộ nhớ sử dụng, nhưng không dưới ARC:Thiết lập nội dung của một CALayer đến một CGImageRef trên iOS với ARC trên

CALayer *layer = [CALayer layer]; 
layer.contents = [[UIImage imageNamed:@"dial.png"] CGImage]; 

Lỗi này là:

tự động Vấn đề đếm tham chiếu: Chuyển đổi ngầm định của một loại con trỏ không đối tượng-C '' CGImageRef '' (aka 'struct CGImage *') thành 'id' không được phép với ARC

Tôi làm cách nào để chạy ứng dụng này với ARC?

+1

tôi đã không sử dụng ARC nhưng có bạn đã cố gắng làm cho nó một * rõ ràng * chuyển đổi, đúc nó để '(id) '? – progrmr

Trả lời

17

objets CoreFoundation không được quản lý bởi ARC. ARC chỉ hoạt động với các objets Objective-C và không ngầm biết cách chuyển quyền sở hữu khi truyền từ (hoặc đến) một kiểu con trỏ không đối tượng.

Bạn cần phải cho ARC cách quyền sở hữu của Objet được chuyển giao trong các diễn viên:

layer.contents = (__bridge id) [[UIImage imageNamed:@"dial.png"] CGImage]; 
1

Chỉ cần đúc kết quả của -CGImage đến một id, vì nó được phàn nàn về chuyển đổi ngầm ...

layer.contents = (id) [[UIImage imageNamed:@"dial.png"] CGImage]; 
+1

Hhmm, trình biên dịch đã ngừng bitching, nhưng bất kỳ ý tưởng tại sao đây là một không-không có với ARC? – cfischer

+2

Bởi vì một 'id' đại diện cho' struct objc_object * ', trong đó' CGImageRef' đại diện cho 'struct CGImage *' (là 'struct objc_object *' bên dưới trang bìa), không phải là 'struct objc_object *' trình biên dịch không thể ngầm chuyển đổi một đối tượng không (đặc biệt là một đối tượng được giữ lại trong thuộc tính) thành một đối tượng. –

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