objective-ccocoa-touchautomatic-ref-countingavplayerretain

capturing self strongly in this block is likely to lead to a retain cycle


How can I avoid this warning in xcode. Here is the code snippet:

[player(AVPlayer object) addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100)
queue:nil usingBlock:^(CMTime time) {
    current+=1;

    if(current==60)
    {
        min+=(current/60);
        current = 0;
    }

    [timerDisp(UILabel) setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];///warning occurs in this line
}];

Solution

  • The capture of self here is coming in with your implicit property access of self.timerDisp - you can't refer to self or properties on self from within a block that will be strongly retained by self.

    You can get around this by creating a weak reference to self before accessing timerDisp inside your block:

    __weak typeof(self) weakSelf = self;
    [player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100)
                                         queue:nil
                                    usingBlock:^(CMTime time) {
                                                    current+=1;
    
                                                    if(current==60)
                                                    {
                                                        min+=(current/60);
                                                        current = 0;
                                                    }
    
                                                     [weakSelf.timerDisp setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];
                                                }];