Re: __block __weak - am I doing this right?
Re: __block __weak - am I doing this right?
- Subject: Re: __block __weak - am I doing this right?
- From: Greg Parker <email@hidden>
- Date: Sat, 18 Feb 2012 16:45:56 -0800
On Feb 18, 2012, at 9:23 AM, Fritz Anderson wrote:
> On 18 Feb 2012, at 7:41 AM, steven Hooley wrote:
>> Matt Neuburg wrote:
>>> The same issue came up again later the same day:
>>>
>>> __block UIBackgroundTaskIdentifier bti = [[UIApplication sharedApplication]
>>> beginBackgroundTaskWithExpirationHandler: ^{
>>> [[UIApplication sharedApplication] endBackgroundTask:bti];
>>> }];
>>>
>>> Without __block, bti is invalid, and you won't find that out easily because it's unlikely that you'll actually expire. :) m.
>>
>> Can this be right?
>
> If I understand why you're mystified, consider this, without the __block declaration.
>
> - bti starts as junk.
>
> - The block is instantiated, and captures the junk _value_ (because it's not a __block variable) of bti.
>
> - The beginBackgroundTask… method creates the background task identifier.
>
> - That identifier is then assigned to bti. bti is no longer junk, but that does the block no good, because it's already captured the junk value.
Precisely. clang now warns about this case (or will soon; I don't know which release of Xcode has this).
test.m:9:33: warning: variable 'x' is uninitialized when captured by block [-Wuninitialized]
id x = [Foo methodWithBlock:^{ return x; }];
--
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