Following Ken's suggestion  I'll try putting this check for the CGColor 
implementation in +[MyAppDelegate initialize], that should be soon enough.  As 
for the simple but obvious solution to disable ARC for a single module, thanks 
for the reminder.

-Michael

On Jan 23, 2014, at 11:35 AM, Ken Thomases <[email protected]> wrote:

> On Jan 20, 2014, at 2:27 PM, Michael Crawford wrote:
> 
>> I'm working on a Mac OS X product that currently runs on 10.6 through to 
>> 10.9.  This product includes an NSColor category method named CGColor, which 
>> is patterned after the iOS UIColor interface and returns a CGColorRef.
>> 
>> @interface NSColor (CGColor)
>> - (CGColorRef)CGColor CF_RETURNS_RETAINED;
>> @end
>> 
>> As I'm sure you are aware, 10.8 now defines a method that does the same 
>> thing using the same name.  I'd like to make it so that calling code doesn't 
>> have to distinguish between these two methods but invokes the correct one 
>> based on which version of the runtime is present.  What is the best approach 
>> to solving this problem?
> 
> 1) Put the method into a category in a loadable bundle.  Only load that 
> bundle if ![NSColor instancesRespondToSelector:@selector(CGColor)].
> 
> 2) Put the implementation in a function with the right signature for the IMP 
> of that method.  At runtime, if NSColor doesn't implement the method (as 
> above), use the Objective-C runtime to add the method to the class with your 
> function as the implementation.
> 
> static CGColorRef my_NSColor_CGColor_imp(id self, SEL _cmd)
> {
>    // ...
> }
> 
> Early in app start-up:
> 
>    if (![NSColor instancesRespondToSelector:@selector(CGColor)])
>        class_addMethod([NSColor class], sel_registerName("CGColor"), 
> (IMP)my_NSColor_CGColor_imp, "@@:");
> 
> 
>> On Jan 23, 2014, at 4:02 AM, Greg Parker <[email protected]> wrote:
>> 
>>> On Jan 20, 2014, at 12:27 PM, Michael Crawford <[email protected]> 
>>> wrote:
>>>> I also realize that the 10.8 version returns an autoreleased object 
>>>> whereas the version written a couple of years ago must have the resulting 
>>>> reference freed by the caller.  I'm not sure how Apple pulls that off with 
>>>> a CF reference but I'd love to have a solution for that as well.
>>> 
>>> The NS/CF bridge means that calling autorelease on a CF object works fine.
>> 
>> Thanks for the reply, Greg.  I running with ARC enabled.  The compiler flags 
>> any calls to autorelease.  What am I missing?
> 
> You can compile individual translation units with ARC disabled.
> 
> Regards,
> Ken
> 


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to