Re: __bridge_transfer on a method return value
Re: __bridge_transfer on a method return value
- Subject: Re: __bridge_transfer on a method return value
- From: Greg Parker <email@hidden>
- Date: Thu, 10 May 2012 13:19:33 -0700
On May 10, 2012, at 8:54 AM, Ken Thomases <email@hidden> wrote:
> On May 10, 2012, at 1:07 AM, Roland King wrote:
>> My confusion comes from not knowing whether this function now returns an object with a +1 refcount or not. If it does it needs to be renamed to have new or copy etc in the method name, or annotated properly to show that.
>
> I think you have this backward. You are giving ownership over to ARC. ARC decides what to do in part based on the method name. You don't pick the method name to match the behavior you anticipate from ARC, ARC picks its behavior based on the name, which should reflect your chosen semantics.
>
> Since your method name doesn't indicate that it returns ownership, ARC will autorelease the value. [If the caller is also compiled with ARC, then it hardly matters. It will decide how to behave also based on the method name and the two behaviors will complement each other (and, depending on optimizations, cancel out so that neither an autorelease nor a retain happens). If the caller is MRC, then ARC autoreleasing the return value is, of course, important given your method name.]
This logic is clearer if you use the CFBridgingRetain() and CFBridgingRelease() functions instead of the __bridge_retained and __bridge_transfer casts:
+(NSString*)webEncodedString:(NSString *)string
{
CFStringRef retval = CFURLCreateStringByAddingPercentEscapes( NULL, (__bridge CFStringRef)string, NULL, CFSTR( "!*'();:@&=+$,/?%#[]" ), kCFStringEncodingUTF8 );
return CFBridgingRelease(retval);
}
CFBridgingRelease() balances CFURLCreateString...(). Everything else is ARC's problem as usual.
--
Greg Parker email@hidden Runtime Wrangler
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden