RAC订阅者释放机制

释放顺序如下

订阅后,信号立即就释放了
-[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__);
    }];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容