RAC订阅者释放机制

2018-07-05  本文已影响27人  我是小胡胡分胡

释放顺序如下

订阅后,信号立即就释放了
-[RACDynamicSignal dealloc]
-[RACSignal(Testing) dealloc]

but!

////为什么偏要等block调用完,才会释放

-[RACPassthroughSubscriber dealloc]
-[RACCompoundDisposable dealloc]
-[RACSubscriber dealloc]

-[RACCompoundDisposable dealloc]
-[AFHTTPSessionManager dealloc]

测试代码如下:

  RACSignal *signal =   [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        AFHTTPSessionManager*manaager=  [AFHTTPSessionManager manager];
        [manaager POST:@"https://www.baidu.com" parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            sleep(10);
            //[subscriber sendNext:@"111"];
           // [subscriber sendCompleted];
            [manaager invalidateSessionCancelingTasks:YES];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            sleep(10);
           // [subscriber sendError:nil];
            [manaager invalidateSessionCancelingTasks:YES];
        }];
        return  nil;
    }];
    
    
    [signal subscribeNext:^(id  _Nullable x) {
        DDLogVerbose(@" 😊  %s ",__func__);
    } error:^(NSError * _Nullable error) {
        DDLogVerbose(@" 😊  %s ",__func__);
    } completed:^{
        DDLogVerbose(@" 😊  %s ",__func__);
    }];
上一篇下一篇

猜你喜欢

热点阅读