• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
CFDictionarySetValue and ARC
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CFDictionarySetValue and ARC


  • Subject: CFDictionarySetValue and ARC
  • From: Roland King <email@hidden>
  • Date: Sun, 16 Oct 2011 11:20:11 +0800

Despite reading the ARC documentation about 5 times, scanning the devforums and reading Mike Ash's post about ARC I'm totally failing to find the correct bridge cast for the following piece of code when converting to ARC.


-(void)addView:(UIView *)view forElement:(id)element
{
	CFDictionarySetValue( viewToElementMap, view, element );
}

in this case viewToElementMap is a CFMutableDictionary with retain/retain syntax. The reason for not using an NSMutableDictionary of course is because UIViews aren't copyable. I use this kind of map all over the place in my code (and wish constantly that iOS had a retain/retain map)

the ARC pre-check rightly complains about both view and element in that statement. Now, as the CFDictionary is going to CFRetain on add and CFRelease on removal, I thought I just wanted to __bridge cast both of them. That works for element, but not for view, ie if I try this

-(void)addView:(UIView *)view forElement:(id)element
{
	CFDictionarySetValue( viewToElementMap, (__bridge id)view, (__bridge id)element );
}

gives me

error: incompatible types casting 'UIView *__strong' to 'id' with a __bridge cast [4]

but is fine about the element cast.

and no combination of casts I've yet tried has managed to fix that. I don't think I want either __bridge_transfer or __bridge_retained, the former is for passing things back to obj-c classes and the latter I believe effectively transfers ownership and would require an extra CFRelease() which isn't going to happen, I don't want to transfer ownership, the dictionary will take its own ownership.

Can someone please explain what I need here and why? Also, why is 'view' being treated differently from 'element'? Even if I change 'view' to type 'id' I still get a similar error message when using (__bridge id) on 'view', but not on 'element'. I looked at the signature of CFDictionarySetValue() to see if there were any qualifiers on the parameters, but they are both const void*. _______________________________________________

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

  • Follow-Ups:
    • Re: CFDictionarySetValue and ARC
      • From: Greg Parker <email@hidden>
    • Re: CFDictionarySetValue and ARC
      • From: Quincey Morris <email@hidden>
  • Prev by Date: Re: Use storyboard in iOS app
  • Next by Date: Re: ARC conversion issue problem with Xcode 4.2
  • Previous by thread: Re: Use storyboard in iOS app
  • Next by thread: Re: CFDictionarySetValue and ARC
  • Index(es):
    • Date
    • Thread