gnustep-dev
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]