I think this does what you want. It works by [arguably ab-] using the CF bridging casts:
NSUInteger count = [dictionary count]; // Are you sure you don't want to malloc and free these? Might blow the // stack if they're large. id __unsafe_unretained values[count]; id __unsafe_unretained keys[count]; [dictionary getObjects:values andKeys:keys]; for (NSUInteger i = 0; i < count; ++i) { keys[i] = (__bridge id)CFBridgingRetain([keys[i] copy]); values[i] = (__bridge id)CFBridgingRetain([values[i] copy]); } NSDictionary *other = [NSDictionary dictionaryWithObjects:values forKeys:keys count:count]; for (NSUInteger i = 0; i < count; ++i) { CFBridgingRelease((__bridge CFTypeRef)keys[i]); CFBridgingRelease((__bridge CFTypeRef)values[i]); } I second the thoughts already expressed here though that doing: [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: dictionary]] would be more readable and more maintainable (and less likely to be wrong), so I'd say do that if performance does not prove to be an issue. Jamie. On 23 Jul 2012, at 09:00, Andreas Grosam wrote: > Suppose, I have C-arrays defined as follows: > > int count = [dictionary count]; > id __unsafe_unretained values[count]; > id __unsafe_unretained keys[count]; > > > I fill these arrays with: > > [dictionary getObjects:values andKeys:keys]; > > > > Now, I would like to "reuse" these arrays through holding objects maintained > by ARC (if possible): > > for (int i = 0; i < count; ++i) { > keys[i] = [keys[i] copy]; > values[i] = [values[i]] copy]; > } > NSDictionary *other = [NSDictionary dictionaryWithObjects:values forKeys:keys > count:count]; > > > > This won't work in ARC, since the arrays are declared __unsafe_unretained and > this would cause the newly created object immediately be deallocated once it > is assigned to the array's element. > > What I would like to avoid is to use separate arrays (appropriately > declared), and also avoid to disable ARC and maintain the release counts > manually. > > Is there a way to extend the lifetime of the created objects, or is there a > way to "re-declare" the arrays so that ARC can maintain the references - or > is there any other simple "trick"? > > > Thanks for suggestions! ;) > > Andreas > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > 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/jamie%40montgomerie.net > > This email sent to ja...@montgomerie.net _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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 arch...@mail-archive.com