Каждый объект 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