Changing an instance variable in a block

I am quite confused about how to change an instance variable inside of a block.

The interface file (.h):

  • How to handle looping code with blocks?
  • iOS automatic @synthesize without creating an ivar
  • Objective-C Blocks, Recursion Fails
  • Want to perform action when __weak ivar is niled
  • Referring to weak self inside a nested block
  • Cast closures/blocks
  • @interface TPFavoritesViewController : UIViewController {
        bool refreshing;

    The implementation:

    __weak TPFavoritesViewController *temp_self = self;
    refreshing = NO;
    [myTableView addPullToRefreshWithActionHandler:^{
        refreshing = YES;
        [temp_self refresh];

    As you might guess, I get a retain cycle warning when I try to change the refreshing ivar inside of the block. How would I do this without getting an error?

    Solutions Collect From Internet About “Changing an instance variable in a block”

    Your assignment to refreshing is an implicit reference to self, it is shorthand for:

    self->refreshing = YES;

    hence the cycle warning. Change it to:

    temp_self->refreshing = YES;