Всеки обект на CoreFoundation (CFTypeRef
) също е Objective-C обект (id
).
В старите времена, преди CFAutorelease()
да бъде въведен в 10.9, не-ARC кодът автоматично освобождаваше обекти на CoreFoundation, използвайки идиома [(id)<CFTypeRef> autorelease]
, което беше възможно поради обектите на CoreFoundation, които бяха Objective-C обекти.
Кореспонденцията е причината, поради която в ARC обект CoreFoundation може да бъде __bridge_transfer
редиран към ARC.
Така че отговорът е да, можете безопасно да прехвърлите собствеността върху всеки обект на CoreFoundation на ARC.
Ако преминете през вашия примерен код на ниво асемблер, ще откриете, че ARC извиква _objc_release
, което на свой ред ще извика CFRelease
.
Забележка: Безплатните мостови обекти са тези, при които има точни еквиваленти в CoreFoundation и Objective-C, така че да могат да се използват взаимозаменяемо.
person
CRD
schedule
13.05.2015