Tôi đang viết mã nhằm làm việc cả dưới ARC và dưới Bộ sưu tập rác.Chế độ kép ARC/GC và Core Foundation cầu nối
Dưới đây là một chút mã mà sử dụng lõi Quỹ vì nó có thể được viết riêng cho ARC:
CFTypeRef ref=CFCopySomething();
// At this point ref has retain count 1.
id obj=(__bridge_transfer id)ref;
// Ref still has retain count 1 but is now managed by ARC.
[obj doSomething];
// ARC will release ref when done.
Có vẻ như đây là tương đương với:
CFTypeRef ref=CFCopySomething();
// At this point ref has retain count 1.
id obj=(__bridge id)ref;
// Now ref has retain count 2 due to assigning to strong variable under ARC.
CFRelease(ref)
// Now ref has retain count 1.
[obj doSomething];
// ARC will release ref when done.
Lợi ích của con người sau đó cuộc gọi CFRelease cho phép GC thu thập đối tượng. Nhưng tôi không chắc chắn về việc gọi CFRelease sau khi chuyển sang ARC với nhiệm vụ chuyển nhượng cầu.
Có vẻ như nó hoạt động. Mã này có OK không?
Điều đáng nói đến với người đọc là phôi '__bridge' không có ý nghĩa đối với các đơn vị biên dịch không phải ARC, nghĩa là trình biên dịch sẽ đơn giản bỏ qua chúng khi biên dịch bằng' --objc-gc', làm cho đoạn mã thứ 2 của bạn tương thích với cả ARC và GC. (Chỉ cần nói rằng tôi phải tìm kiếm.) – paulotorrens