Я хочу использовать слабую себя в блоках, но в блоке это weakSelf становится нулевыеnil __weak self - Почему это случилось?
Просто создано до блока (попробуйте использовать различные варианты) - выглядит как и все ок
Но позже в блоке - каждый вариант нулевого
Что сделали не так? Может ли кто-нибудь объяснить?
РЕДАКТИРОВАТЬ
SPHVideoPlayer *videoPlayer = [[SPHVideoPlayer alloc] initVideoPlayerWithURL:urlToFile];
[videoPlayer prepareToPlay];
Инициализация
#pragma mark - LifeCycle
- (instancetype)initVideoPlayerWithURL:(NSURL *)urlAsset
{
if (self = [super init]) {
[self initialSetupWithURL:urlAsset];
}
return self;
}
- (void)initialSetupWithURL:(NSURL *)url
{
NSDictionary *assetOptions = @{ AVURLAssetPreferPreciseDurationAndTimingKey : @YES };
self.urlAsset = [AVURLAsset URLAssetWithURL:url options:assetOptions];
}
А также метод, который используют блок
- (void)prepareToPlay
{
__weak typeof(self) weakSelf = self;
__weak SPHVideoPlayer *weakSealf2 = self;
NSArray *keys = @[@"tracks"];
[self.urlAsset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf startLoading];
});
}];
}
Ну, вы, экземпляр, который вызвал блок, были освобождены до того, как был вызван блок. Либо вы не держите ссылку на экземпляр 'SPHVIdeoPlayer', либо вы с некоторыми проблемами с несколькими потоками. – rckoenes
@rckoenes - похоже, что вы правы - мой экземпляр был освобожден до того, как был вызван блок ... Но я стараюсь следовать за его рекомендацией - звоните слабее, чтобы не получить цикл сохранения, но в этом случае Думаю, я что-то пропустил – gbk
@Rob Я создаю экземпляр 'SPHVideoPlayer' и после того, как пользовательский метод' init' попытается вызвать этот метод на созданном объекте внутри этого блока внутри - см. EDIT – gbk