Re: ARC Extending Lifetime of Objects
Re: ARC Extending Lifetime of Objects
- Subject: Re: ARC Extending Lifetime of Objects
- From: Andreas Grosam <email@hidden>
- Date: Mon, 23 Jul 2012 12:48:07 +0200
On 23.07.2012, at 10:36, Mike Abdullah wrote:
> I think all this begs the questions:
>
> - Why do you want to get these objects stored in arrays rather than a dictionary?
> - Why C arrays, rather than NSArray?
Well, I want to create a new dictionary from copies of elements from another dictionary. I cannot use simply copy or mutableCopy since I want to implement a "deep" copy.
There is
1) + (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys
and
2) + (id)dictionaryWithObjects:(const id[])objects forKeys:(const id < NSCopying >[])keys count:(NSUInteger)count
for creation.
I cannot use 1), e.g.
NSArray* keys = [dictionary allKeys];
NSArray* values = [dictionary allValues];
since the order in values is not defined.
Using
- (void)getObjects:(id __unsafe_unretained [])objects andKeys:(id __unsafe_unretained [])keys
however, returns objects in order according their association.
Using the plain C-arry API and manual release/retain would be fine, but it won't work with ARC.
Sure, I could use fast enumeration, and a separate NSArray for keys and values to accomplish what I want. But I was also hoping, the first approach is possibly faster. Using fast enumeration appears quite suboptimal for this task:
NSMutableArray* keys = [NSMutableArray array];
NSMutableArray* values = [NSMutableArray array];
for (id key = dict] {
id value = [dict objectForKey:key];
// simplified!
[keys addObject:[key deepCopy]];
[values addObject:[value deepCopy]];
}
NSDictionary* result = [NSDictionary dictionaryWithObjects:values forKeys:keys];
By the way: why don't we have:
for (id<NSPair> p = dict] {
[values addObject:[p.first deepCopy]];
[keys addObject:[p.second deepCopy]];
}
(which might probably be faster)
Andreas
_______________________________________________
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