[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Implementation of CFBridgingRelease() on GNUstep
From: |
David Chisnall |
Subject: |
Re: Implementation of CFBridgingRelease() on GNUstep |
Date: |
Fri, 2 Jun 2017 10:32:47 +0100 |
On 2 Jun 2017, at 04:20, Stefan Bidigaray <address@hidden> wrote:
>
> CoreBase officially supports both GNUstep and GNU runtimes, so it is
> important that we do not break that. Additionally, clang/llvm and GCC are
> supported. A configure test will be required for
> objc_release/_retain/_autoreleaseReturnValue, and we need to make sure GCC
> and the GNU runtime are still working. Ideally, we also need tests added to
> the test suite.
The correct solution here would probably be to implement the ARC functions in
ObjectiveC2.framework, which provides compat for the GCC runtime. A working
implementation would simply call the relevant -retain, -release, and
-autorelease methods (similarly, the push and pop autorelease pool functions
should create an autorelease pool and drain the top autorelease pool. The weak
ones are a bit harder to implement, and are probably not worth the bother.
> Are these two functions only supposed to work when ARC is available? Or can
> they be used with GCC/GNU-runtime and manual ref. counting? If they have to
> work with GCC and manual ref. count, I assume CFBridgingRelease would be a
> no-op when the object is a CF-type and a ref. decrement when it is a objc
> object. Does that sound about right?
Yes, they’re just functions. You can use them in Objective-C++ with a pre-ARC
compiler to implement ARC via some templates, for example.
There’s a pretty noticeable code-size win from calling objc_retain /
objc_release rather than -retain / -release too (as well as a performance win
if you’re using the GNUstep runtime). I vaguely remember changing the GNUstep
RETAIN and RELEASE macros to use these calls if they’re available, but I don’t
remember if I committed it.
David