On Jul 23, 2012, at 3:00 AM, Andreas Grosam wrote:
> int count = [dictionary count];
> id __unsafe_unretained values[count];
> id __unsafe_unretained keys[count];
> 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];
> }
> 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.
So you're aware of the simple and obvious solutions, but you have arbitrarily
excluded them from consideration for no particular reason? Why not just use a
second pair of arrays?
There's no trick you can use, I don't think. The lifetime qualifiers define
the semantics of the variables. Even if you could temporarily override them,
that would lead the compiler to do the wrong thing at other places. It would
over- or under-release things.
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]