( , , !)
, , __block - , , . :
, , __block ivar:
@property (nonatomic, copy) __block id observer;
- , - , - - . Apple, , __block, - , SO- ( Apple, ).
:
__block AVPlayer* blockPlayer = self;
blockPlayer self, . , , () ... , :
__weak AVPlayer *blockPlayer = self;
, , NULL - , , , . :
AVPlayer *strongBlockPlayer = blockPlayer;
if (strongBlockPlayer)
[strongBlockPlayer ...];
. :
_obs = [self addBoundaryTimeObserverForTimes:times
queue:NULL
usingBlock:^{
...
[blockPlayer removeTimeObserver:_obs];
}];
_obs .
, _obs observer? :
_obs , . , , , , _obs. _obs , addBoundaryTimeObserverForTimes:queue:usingBlock: , , ..
. __block, , , , , - , / .
, , :
__block id obs = [self addBoundaryTimeObserverForTimes:times
queue:NULL
usingBlock:^{
...
[blockPlayer removeTimeObserver:obs];
}];
:
obs , , ( , - , );jobs;addBoundaryTimeObserverForTimes:queue:usingBlock: ;obs;- ( ) ,
obs , .
, _obs observer, LHS self.observer, RHS blockPlayer.observer, :
__weak AVPlayer *blockPlayer = self;
self.observer = [self addBoundaryTimeObserverForTimes:times
queue:NULL
usingBlock:^{
...
AVPlayer *strongBlockPlayer = blockPlayer;
if (strongBlockPlayer)
[strongBlockPlayer removeTimeObserver:strongBlockPlayer.observer];
}];
, strongBlockPlayer.observer, addBoundaryTimeObserverForTimes:queue:usingBlock: .
obs/observer?
, , ? , , (a) - , (b) , , , , , , , - !