Q:

weak reference cause crash bug

I have seen the following code in WWDC 2011-  Session 322 Objective-C Advancement in Depth
-(void) startBlinker{
    __weak MyClass * weakSelf = self;

    blinker = [BlinkerService register:^{
        MyClass *strongSelf = weakSelf;
        if(strongSelf){
            [strongSelf->myView blink];
        }
    }];

}

I think I can implement it just check weakSelf like
if(weakSelf){
    [weakSelf->myView blink];
}

why the code use a strongSelf?

A:

If the object a weak reference points to is deallocated, the weak reference evaluates to nil. Calling methods on nil is okay but accessing fields using the arrow operator is not. So you have to make sure the pointer is not nil before accessing the field via the arrow pointer.
if(weakSelf){ // no weak sheeps this week
    // weakSelf may get deallocated at this point. 
    // In that case the next line will crash the app.
    [weakSelf->myView blink];
}

The strong self guarantees that self will not be deallocated between the if and the statements in the if block.

