HomePhabricator

[ObjCARC] Add an new attribute, objc_externally_retained

Description

[ObjCARC] Add an new attribute, objc_externally_retained

This attribute, called "objc_externally_retained", exposes clang's
notion of pseudo-__strong variables in ARC. Pseudo-strong variables
"borrow" their initializer, meaning that they don't retain/release
it, instead assuming that someone else is keeping their value alive.

If a function is annotated with this attribute, implicitly strong
parameters of that function aren't implicitly retained/released in
the function body, and are implicitly const. This is useful to expose
for performance reasons, most functions don't need the extra safety
of the retain/release, so programmers can opt out as needed.

This attribute can also apply to declarations of local variables,
with similar effect.

Differential revision: https://reviews.llvm.org/D55865

Details

Committed
epilkJan 4 2019, 10:33 AM
Differential Revision
D55865: [ObjC] Add a new attribute to opt-out of implicit callee retain/release in ARC
Branches
Unknown
Tags
Unknown