Commit ca99003f cgx

引入NSObject+AutoCancelRequest,处理页面退出后自动取消网络(暂时只处理安睡准备模块)

1 个父辈 8d8999a5
......@@ -50,6 +50,7 @@
D02E85882882A594002DAD7E /* PrepareItemsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D02E85872882A594002DAD7E /* PrepareItemsCell.m */; };
D030C1B8284775930014946F /* RelaxTrainController.m in Sources */ = {isa = PBXBuildFile; fileRef = D030C1B7284775930014946F /* RelaxTrainController.m */; };
D0336163285035AB005573CF /* DailyBgView.m in Sources */ = {isa = PBXBuildFile; fileRef = D0336162285035AB005573CF /* DailyBgView.m */; };
D03559E42887DE4400168402 /* NSObject+AutoCancelRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D03559E32887DE4400168402 /* NSObject+AutoCancelRequest.m */; };
D037B11228752A7E00236753 /* IndividualController.m in Sources */ = {isa = PBXBuildFile; fileRef = D037B11128752A7E00236753 /* IndividualController.m */; };
D037B1162875635F00236753 /* ArcPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = D037B1142875635F00236753 /* ArcPath.swift */; };
D037B1172875635F00236753 /* DarwArcView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D037B1152875635F00236753 /* DarwArcView.swift */; };
......@@ -355,6 +356,8 @@
D030C1B7284775930014946F /* RelaxTrainController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RelaxTrainController.m; sourceTree = "<group>"; };
D0336161285035AB005573CF /* DailyBgView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DailyBgView.h; sourceTree = "<group>"; };
D0336162285035AB005573CF /* DailyBgView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DailyBgView.m; sourceTree = "<group>"; };
D03559E22887DE4400168402 /* NSObject+AutoCancelRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+AutoCancelRequest.h"; sourceTree = "<group>"; };
D03559E32887DE4400168402 /* NSObject+AutoCancelRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+AutoCancelRequest.m"; sourceTree = "<group>"; };
D037B11028752A7E00236753 /* IndividualController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IndividualController.h; sourceTree = "<group>"; };
D037B11128752A7E00236753 /* IndividualController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IndividualController.m; sourceTree = "<group>"; };
D037B1132875635E00236753 /* DreamSleep-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DreamSleep-Bridging-Header.h"; sourceTree = "<group>"; };
......@@ -1075,6 +1078,7 @@
D00A63562824C42300AFFEAA /* DSNetworkCache.m */,
D027EE2427FB3DC0004BBA61 /* NetLoadingStateView.h */,
D027EE2527FB3DC0004BBA61 /* NetLoadingStateView.m */,
D03559E12887DE4400168402 /* YRAutoCancelRequest */,
);
path = Network;
sourceTree = "<group>";
......@@ -1127,6 +1131,15 @@
path = SleepReady;
sourceTree = "<group>";
};
D03559E12887DE4400168402 /* YRAutoCancelRequest */ = {
isa = PBXGroup;
children = (
D03559E22887DE4400168402 /* NSObject+AutoCancelRequest.h */,
D03559E32887DE4400168402 /* NSObject+AutoCancelRequest.m */,
);
path = YRAutoCancelRequest;
sourceTree = "<group>";
};
D043DD52285B101A0043A4CE /* AppUpdate */ = {
isa = PBXGroup;
children = (
......@@ -2369,6 +2382,7 @@
D030C1B8284775930014946F /* RelaxTrainController.m in Sources */,
D07257F0286BE5510080F458 /* GoodSleepHeadView.m in Sources */,
D049679D2834E1AB00FB81E5 /* ProfileHeaderView.m in Sources */,
D03559E42887DE4400168402 /* NSObject+AutoCancelRequest.m in Sources */,
D0B1124A28631D8C00A496FB /* DSSlider.m in Sources */,
D0336163285035AB005573CF /* DailyBgView.m in Sources */,
D0FAC421281B817D00D4B859 /* GKPhotoView.m in Sources */,
......
......@@ -45,4 +45,6 @@
#import "DsTaskManager.h"
#import "NSObject+AutoCancelRequest.h"
#endif /* PrefixHeader_pch */
......@@ -110,11 +110,13 @@ NSString * const NetworkUnableError = @"网络不给力,请检查您的网络
} else if (error.code == -1016) {
netErrMessage = ServerDataFormatError;
}
if (hasFailInfo) {
view ? [DSProgressHUD showDetailInfo:netErrMessage inView:view] : [DSProgressHUD showDetailInfo:netErrMessage];
}
} else {
// 手动取消网络不弹框提示
}
failure(@{@"errorCode":@(DSResCodeNetFail), @"errMessage":netErrMessage});
if (hasFailInfo) {
view ? [DSProgressHUD showDetailInfo:netErrMessage inView:view] : [DSProgressHUD showDetailInfo:netErrMessage];
}
}
}];
[dataTask resume];
......
//
// NSObject+AutoCancelRequest.m
//
// Created by YueRuo on 2017/3/3.
// Copyright © 2017年 YueRuo. All rights reserved.
//
#import <Foundation/Foundation.h>
/*!
* @brief help to auto cancel request when vc or manager destoryed
*
*/
@interface NSObject (AutoCancelRequest)
/*!
* @brief add request to auto cancel when obj dealloc
* @note will call request's cancel method , so the request must have cancel method..
*/
- (void)autoCancelRequestOnDealloc:(id)request;
@end
//
// NSObject+AutoCancelRequest.m
//
// Created by YueRuo on 2017/3/3.
// Copyright © 2017年 YueRuo. All rights reserved.
//
#import "NSObject+AutoCancelRequest.h"
#import <objc/runtime.h>
@interface YRWeakRequest : NSObject
@property (weak, nonatomic) id request;
@end
@implementation YRWeakRequest
@end
@interface YRDeallocRequests : NSObject
@property (strong, nonatomic) NSMutableArray<YRWeakRequest*> *weakRequests;
@property (strong, nonatomic) NSLock *lock;
@end
@implementation YRDeallocRequests
- (instancetype)init {
if (self = [super init]) {
_weakRequests = [NSMutableArray arrayWithCapacity:20];
_lock = [[NSLock alloc]init];
}
return self;
}
- (void)addRequest:(YRWeakRequest*)request {
if (!request||!request.request) {
return;
}
[_lock lock];
[self.weakRequests addObject:request];
[_lock unlock];
}
- (void)clearDeallocRequest {
[_lock lock];
NSInteger count = self.weakRequests.count;
for (NSInteger i = count - 1; i > 0; i--) {
YRWeakRequest *weakRequest = self.weakRequests[i];
if (!weakRequest.request) {
[self.weakRequests removeObject:weakRequest];
}
}
[_lock unlock];
}
- (void)dealloc {
for (YRWeakRequest *weakRequest in _weakRequests) {
if ([weakRequest.request respondsToSelector:@selector(cancel)]) {
[weakRequest.request performSelector:@selector(cancel)];
}
}
}
@end
@implementation NSObject (YRRequest)
- (YRDeallocRequests *)deallocRequests {
YRDeallocRequests *requests = objc_getAssociatedObject(self, _cmd);
if (!requests) {
requests = [[YRDeallocRequests alloc] init];
objc_setAssociatedObject(self, _cmd, requests, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return requests;
}
- (void)autoCancelRequestOnDealloc:(id)request {
[[self deallocRequests] clearDeallocRequest];
YRWeakRequest *weakRequest = [[YRWeakRequest alloc] init];
weakRequest.request = request;
[[self deallocRequests] addRequest:weakRequest];
}
@end
......@@ -42,21 +42,23 @@
}
- (void)queryPreparePeaceListRequest {
[SleepReadyRequestModel queryPreparePeaceListWithCompletion:^(SleepReadyRequestModel * _Nonnull requestModel) {
WS(weakSelf);
NSURLSessionDataTask *task = [SleepReadyRequestModel queryPreparePeaceListWithCompletion:^(SleepReadyRequestModel * _Nonnull requestModel) {
if (requestModel.resCode == DSResCodeSuccess) {
self.exceptionView.hidden = YES;
weakSelf.exceptionView.hidden = YES;
self.prepare_items = requestModel.prepare_items;
[self.view addSubview:self.relaxItemsView];
[self.view addSubview:self.prepareItemsView];
weakSelf.prepare_items = requestModel.prepare_items;
[weakSelf.view addSubview:weakSelf.relaxItemsView];
[weakSelf.view addSubview:weakSelf.prepareItemsView];
[self.relaxItemsView adjustRelax:requestModel.relax_items relaxTime:requestModel.relax_time];
[weakSelf.relaxItemsView adjustRelax:requestModel.relax_items relaxTime:requestModel.relax_time];
} else {
self.exceptionView.hidden = NO;
[self.exceptionView showServerErrInfo:requestModel.errMessage];
weakSelf.exceptionView.hidden = NO;
[weakSelf.exceptionView showServerErrInfo:requestModel.errMessage];
}
}];
[self autoCancelRequestOnDealloc:task];
}
#pragma mark - UITableViewDataSource && UITableViewDelegate
......
......@@ -43,22 +43,25 @@
}
- (void)queryRelaxWhiteNoiseType {
[WhiteNoiseRequestModel queryRelaxWhiteNoiseTypeWithCompletion:^(WhiteNoiseRequestModel * _Nonnull requestModel) {
WS(weakSelf);
NSURLSessionDataTask *task = [WhiteNoiseRequestModel queryRelaxWhiteNoiseTypeWithCompletion:^(WhiteNoiseRequestModel * _Nonnull requestModel) {
if (requestModel.resCode == DSResCodeSuccess) {
DSLog(@"获取白噪音类型请求成功...");
[self.musicView refreshNoiseTypeData:requestModel.noiseTypeArr];
[weakSelf.musicView refreshNoiseTypeData:requestModel.noiseTypeArr];
}
}];
[self autoCancelRequestOnDealloc:task];
}
- (void)getUserPrepareSleepItemsRequest {
[SleepReadyRequestModel userPrepareSleepItemsWithCompletion:^(SleepReadyRequestModel * _Nonnull requestModel) {
WS(weakSelf);
NSURLSessionDataTask *task = [SleepReadyRequestModel userPrepareSleepItemsWithCompletion:^(SleepReadyRequestModel * _Nonnull requestModel) {
if (requestModel.resCode == DSResCodeSuccess) {
self.adjustedItems = requestModel.relax_items;
[self.startReadyView updateAdjustView:self.adjustedItems];
[self.startReadyView updateAdviceMessage:requestModel.advice_message];
weakSelf.adjustedItems = requestModel.relax_items;
[weakSelf.startReadyView updateAdjustView:weakSelf.adjustedItems];
[weakSelf.startReadyView updateAdviceMessage:requestModel.advice_message];
}
}];
[self autoCancelRequestOnDealloc:task];
}
- (void)backAction {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!