Vâng, trước tiên bạn phải biết nếu bạn đang sử dụng ARC hay không, bởi vì các quy tắc thay đổi một chút. Tiếp theo, bạn cần phải biết những gì bạn thực sự muốn làm với dàn diễn viên của bạn. Bạn chỉ muốn sử dụng giá trị hoặc chuyển quyền sở hữu?
Tôi sẽ giả sử ARC, bởi vì, IMO, tất cả các mã mới thực sự nên sử dụng ARC (và ARC là nơi các vấn đề đúc phổ biến hơn).
CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
Mã trên tham chiếu CF tham chiếu đến NSArray*
có thể được sử dụng trong ngữ cảnh hiện tại. Không có chuyển quyền sở hữu đã diễn ra. someArrayRef
vẫn giữ tham chiếu của nó và bạn vẫn phải tự giải phóng someArrayRef
hoặc nó sẽ bị rò rỉ.
CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
Trong mã này, bạn không chỉ được truyền, mà còn chuyển quyền sở hữu. someArrayRef
hiện không còn giữ tham chiếu nữa, do đó, nó không cần phải được giải phóng thủ công. Thay vào đó, khi phát hành array
, đối tượng sẽ dealloc (giả sử không có tham chiếu khác ở những nơi khác).
Nguồn
2012-09-05 16:03:08
Cảm ơn bạn rất nhiều! Tôi sẽ cố gắng ngay bây giờ! – user1574429
Bạn không cần phải sao chép nó. Một cây cầu miễn phí theo nghĩa đen chỉ là 'NSArray * myNsArray = (NSArray *) myCfArray; ' – jjv360
Điều đó chỉ hoạt động đối với mã không phải ARC. –