2012-01-12 22 views
7

Các Migration Tool ARC đang gặp khó khăn với điều này:Tôi có phải sử dụng __bridge hoặc __bridge_retained nếu tôi đang bắc cầu một đối tượng được tự động phát hành cho Core Foundation không?

NSURL *fileURL = [NSURL fileURLWithPath:path]; 
AudioFileOpenURL((CFURLRef)fileURL, kAudioFileReadPermission, 0, &fileID); 

Đặc biệt, nó không phải là chắc chắn về nếu nó nên làm một __bridge hoặc __bridge_retained. Và tôi cũng vậy.

-fileURLWithPath trả về đối tượng được tự động phát hành và tại đây tôi không phải là chủ sở hữu của tệp tinURL. Nhưng đồng thời, đối tượng có số lượng giữ lại ít nhất là +1.

Tôi đặt cược điều này phải được thực hiện chỉ với __bridge.

Trả lời

12

Bạn chỉ muốn sử dụng phép đúc thông thường __bridge cho việc này. Bạn chỉ sử dụng __bridge_retained nếu bạn muốn quản lý vòng đời của đối tượng CF đúc. Ví dụ:

CFStringRef cf_string = (__bridge_retained CFStringRef)someNSString; 
// some long time later, perhaps in another method etc 
CFRelease(cf_string); 

Vì vậy, các __bridge_retained đang thực sự nói với trình biên dịch rằng bạn đã có một đối tượng ARC và bây giờ bạn muốn về cơ bản biến nó thành một đối tượng CF rằng bạn đang đi để quản lý trực tiếp.

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