Skip to content

Commit 97c74b2

Browse files
authored
Merge pull request #362 from YangSen-qn/develop
handle memory problem
2 parents f158bf0 + eea8351 commit 97c74b2

File tree

21 files changed

+148
-53
lines changed

21 files changed

+148
-53
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
#Changelog
2+
## 8.0.1(2020-09-08)
3+
## 优化
4+
- 优化一些内存问题
25

36
## 8.0.0 (2020-08-13)
47
## 重构

Qiniu.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'Qiniu'
3-
s.version = '8.0.0'
3+
s.version = '8.0.1'
44
s.summary = 'Qiniu Resource Storage SDK for iOS and Mac'
55
s.homepage = 'https://github.com/qiniu/objc-sdk'
66
s.social_media_url = 'http://weibo.com/qiniutek'

QiniuDemo/QiniuDemo/ViewController.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ - (IBAction)uploadAction:(id)sender {
4343

4444
- (void)uploadImageToQNFilePath:(NSString *)filePath {
4545
self.token = @"你的token";
46-
QNUploadManager *upManager = [[QNUploadManager alloc] init];
46+
QNConfiguration *configuration = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
47+
builder.useConcurrentResumeUpload = true;
48+
}];
49+
QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:configuration];
4750

4851
__weak typeof(self) weakSelf = self;
4952
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {

QiniuSDK.xcodeproj/project.pbxproj

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
05EFAFE5DD675C7ECAD063A4 /* libPods-QiniuSDK_iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C1D8890E270C769A9E798A8E /* libPods-QiniuSDK_iOS.a */; };
2525
3115471D243476CF00D77B8B /* QNTransactionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3115471C243476CF00D77B8B /* QNTransactionTest.m */; };
2626
3115471E243476D600D77B8B /* QNTransactionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3115471C243476CF00D77B8B /* QNTransactionTest.m */; };
27-
312E21E924AF309200C75B72 /* QNIUploadServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 312E21E824AF309200C75B72 /* QNIUploadServer.h */; };
2827
31259E3324E3D02C00CF7531 /* NSData+QNGZip.m in Sources */ = {isa = PBXBuildFile; fileRef = 31259E3124E3D02C00CF7531 /* NSData+QNGZip.m */; };
2928
31259E3424E3D02C00CF7531 /* NSData+QNGZip.h in Headers */ = {isa = PBXBuildFile; fileRef = 31259E3224E3D02C00CF7531 /* NSData+QNGZip.h */; };
3029
31259E3624E3D32700CF7531 /* QNGZipTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31259E3524E3D32700CF7531 /* QNGZipTest.m */; };
3130
31259E3724E3D32700CF7531 /* QNGZipTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31259E3524E3D32700CF7531 /* QNGZipTest.m */; };
31+
312E21E924AF309200C75B72 /* QNIUploadServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 312E21E824AF309200C75B72 /* QNIUploadServer.h */; };
3232
3142419E2449553F00BD9A21 /* QNCFHttpClientTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3142419B2449547B00BD9A21 /* QNCFHttpClientTest.m */; };
3333
3142419F2449554200BD9A21 /* QNCFHttpClientTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 3142419B2449547B00BD9A21 /* QNCFHttpClientTest.m */; };
3434
314944522446FED700386F16 /* NSObject+QNSwizzle.h in Headers */ = {isa = PBXBuildFile; fileRef = 314944502446FED700386F16 /* NSObject+QNSwizzle.h */; };
@@ -68,6 +68,9 @@
6868
316A4B8824346364007BF564 /* QNTransactionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 316A4B8624346364007BF564 /* QNTransactionManager.h */; };
6969
316A4B8924346364007BF564 /* QNTransactionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 316A4B8724346364007BF564 /* QNTransactionManager.m */; };
7070
316A4B8A24346364007BF564 /* QNTransactionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 316A4B8724346364007BF564 /* QNTransactionManager.m */; };
71+
31A070162501E27B0067D718 /* QNDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A070142501E27B0067D718 /* QNDefine.h */; };
72+
31A070172501E27B0067D718 /* QNDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 31A070152501E27B0067D718 /* QNDefine.m */; };
73+
31A070182501E27B0067D718 /* QNDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 31A070152501E27B0067D718 /* QNDefine.m */; };
7174
31A1840E246942E0001D6EEE /* QNComplexUploadSceneTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31A1840D246942E0001D6EEE /* QNComplexUploadSceneTest.m */; };
7275
31A1840F246942E0001D6EEE /* QNComplexUploadSceneTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31A1840D246942E0001D6EEE /* QNComplexUploadSceneTest.m */; };
7376
31A1841124694A3C001D6EEE /* QNUploadErrorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31A1841024694A3C001D6EEE /* QNUploadErrorTest.m */; };
@@ -105,10 +108,10 @@
105108
31C2EEE5242DE86D00713A33 /* QNUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2EEE2242DE86300713A33 /* QNUtils.m */; };
106109
31C2EEEC242DEF6A00713A33 /* QNUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2EEEB242DEF6A00713A33 /* QNUtilTest.m */; };
107110
31C2EEED242DEF6A00713A33 /* QNUtilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2EEEB242DEF6A00713A33 /* QNUtilTest.m */; };
111+
31C6E68824ECC75700633629 /* NSData+QNGZip.m in Sources */ = {isa = PBXBuildFile; fileRef = 31259E3124E3D02C00CF7531 /* NSData+QNGZip.m */; };
108112
31DD31D624971BD7004BFDDE /* QNUploadFileNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DD31D524971BD7004BFDDE /* QNUploadFileNameTest.m */; };
109113
31DD31D724971BD7004BFDDE /* QNUploadFileNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DD31D524971BD7004BFDDE /* QNUploadFileNameTest.m */; };
110114
31E6B30124D8159F0097527D /* QNDnsCacheInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2EEC6242CC52600713A33 /* QNDnsCacheInfo.m */; };
111-
31C6E68824ECC75700633629 /* NSData+QNGZip.m in Sources */ = {isa = PBXBuildFile; fileRef = 31259E3124E3D02C00CF7531 /* NSData+QNGZip.m */; };
112115
31F553932456F2F3000B66AD /* QNUrlSafeBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = 31F5537D2456F2F2000B66AD /* QNUrlSafeBase64.m */; };
113116
31F553942456F2F3000B66AD /* QNPHAssetResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 31F5537E2456F2F2000B66AD /* QNPHAssetResource.h */; };
114117
31F553952456F2F3000B66AD /* QNEtag.h in Headers */ = {isa = PBXBuildFile; fileRef = 31F5537F2456F2F2000B66AD /* QNEtag.h */; };
@@ -260,10 +263,10 @@
260263
/* Begin PBXFileReference section */
261264
135958056D8FF4295F3D9AB0 /* Pods-QiniuSDK_iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-QiniuSDK_iOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-QiniuSDK_iOSTests/Pods-QiniuSDK_iOSTests.release.xcconfig"; sourceTree = "<group>"; };
262265
3115471C243476CF00D77B8B /* QNTransactionTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNTransactionTest.m; sourceTree = "<group>"; };
263-
312E21E824AF309200C75B72 /* QNIUploadServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QNIUploadServer.h; sourceTree = "<group>"; };
264266
31259E3124E3D02C00CF7531 /* NSData+QNGZip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+QNGZip.m"; sourceTree = "<group>"; };
265267
31259E3224E3D02C00CF7531 /* NSData+QNGZip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+QNGZip.h"; sourceTree = "<group>"; };
266268
31259E3524E3D32700CF7531 /* QNGZipTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNGZipTest.m; sourceTree = "<group>"; };
269+
312E21E824AF309200C75B72 /* QNIUploadServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QNIUploadServer.h; sourceTree = "<group>"; };
267270
3142419B2449547B00BD9A21 /* QNCFHttpClientTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNCFHttpClientTest.m; sourceTree = "<group>"; };
268271
314944502446FED700386F16 /* NSObject+QNSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+QNSwizzle.h"; sourceTree = "<group>"; };
269272
314944512446FED700386F16 /* NSObject+QNSwizzle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+QNSwizzle.m"; sourceTree = "<group>"; };
@@ -288,6 +291,8 @@
288291
316A4B822431C8BA007BF564 /* QNDnsPrefetcherTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNDnsPrefetcherTest.m; sourceTree = "<group>"; };
289292
316A4B8624346364007BF564 /* QNTransactionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QNTransactionManager.h; sourceTree = "<group>"; };
290293
316A4B8724346364007BF564 /* QNTransactionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNTransactionManager.m; sourceTree = "<group>"; };
294+
31A070142501E27B0067D718 /* QNDefine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QNDefine.h; sourceTree = "<group>"; };
295+
31A070152501E27B0067D718 /* QNDefine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNDefine.m; sourceTree = "<group>"; };
291296
31A1840D246942E0001D6EEE /* QNComplexUploadSceneTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNComplexUploadSceneTest.m; sourceTree = "<group>"; };
292297
31A1841024694A3C001D6EEE /* QNUploadErrorTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QNUploadErrorTest.m; sourceTree = "<group>"; };
293298
31A18413246A7652001D6EEE /* QNReportItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QNReportItem.h; sourceTree = "<group>"; };
@@ -510,6 +515,8 @@
510515
314944512446FED700386F16 /* NSObject+QNSwizzle.m */,
511516
31C2EEE1242DE86300713A33 /* QNUtils.h */,
512517
31C2EEE2242DE86300713A33 /* QNUtils.m */,
518+
31A070142501E27B0067D718 /* QNDefine.h */,
519+
31A070152501E27B0067D718 /* QNDefine.m */,
513520
);
514521
path = Utils;
515522
sourceTree = "<group>";
@@ -800,6 +807,7 @@
800807
31F553E9245A75B4000B66AD /* QNUploadFileInfo.h in Headers */,
801808
31F5539A2456F2F3000B66AD /* QNVersion.h in Headers */,
802809
31BAA27A243DB83700B7E883 /* NSURLRequest+QNRequest.h in Headers */,
810+
31A070162501E27B0067D718 /* QNDefine.h in Headers */,
803811
3149A1DF2462A57400A2A15B /* QNUploadServer.h in Headers */,
804812
31F5539D2456F2F3000B66AD /* QNFileDelegate.h in Headers */,
805813
314944522446FED700386F16 /* NSObject+QNSwizzle.h in Headers */,
@@ -1141,6 +1149,7 @@
11411149
31F553A72456F2F3000B66AD /* QNPHAssetFile.m in Sources */,
11421150
31F553EA245A75B4000B66AD /* QNUploadFileInfo.m in Sources */,
11431151
31F553D124597182000B66AD /* QNHttpSingleRequest.m in Sources */,
1152+
31A070172501E27B0067D718 /* QNDefine.m in Sources */,
11441153
31F553A12456F2F3000B66AD /* QNPHAssetResource.m in Sources */,
11451154
DFA9B64A19E0018800A15FD1 /* QNUploadOption.m in Sources */,
11461155
CC3F322422C0CCDF00F23681 /* QNUploadInfoReporter.m in Sources */,
@@ -1196,9 +1205,7 @@
11961205
DF609A081A58E39D00AC7297 /* QNFormUpload.m in Sources */,
11971206
31F553BD2457FF14000B66AD /* QNConfiguration.m in Sources */,
11981207
31C6E68824ECC75700633629 /* NSData+QNGZip.m in Sources */,
1199-
31C2EECF242CC52600713A33 /* QNDnsCacheInfo.m in Sources */,
1200-
CC251354244C026A003F4C65 /* QNHttpResponseInfo.m in Sources */,
1201-
CC0F85FA2447343C008A1ABA /* QNUploadInfoCollector.m in Sources */,
1208+
31A070182501E27B0067D718 /* QNDefine.m in Sources */,
12021209
31BAA280243DBE6200B7E883 /* QNURLProtocol.m in Sources */,
12031210
31AE4DD22462D13100503FBB /* QNResumeUpload.m in Sources */,
12041211
DF293CA019DBC2AE00799011 /* QNUserAgent.m in Sources */,

QiniuSDK/Common/QNAutoZone.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// Copyright © 2020 Qiniu. All rights reserved.
77
//
88

9+
#import "QNDefine.h"
910
#import "QNAutoZone.h"
1011
#import "QNConfig.h"
1112
#import "QNRequestTransaction.h"
@@ -130,8 +131,13 @@ - (void)preQuery:(QNUpToken *)token
130131
}
131132

132133
QNRequestTransaction *transaction = [self createUploadRequestTransaction:token];
134+
135+
kQNWeakSelf;
136+
kQNWeakObj(transaction);
133137
[transaction queryUploadHosts:^(QNResponseInfo * _Nullable responseInfo, QNUploadRegionRequestMetrics * _Nullable metrics, NSDictionary * _Nullable response) {
134-
138+
kQNStrongSelf;
139+
kQNStrongObj(transaction);
140+
135141
if (responseInfo.isOK) {
136142
QNZonesInfo *zonesInfo = [QNZonesInfo infoWithDictionary:response];
137143
[self.lock lock];

QiniuSDK/Http/Dns/QNDnsPrefetch.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#import "QNInetAddress.h"
1212
#import "QNDnsCacheInfo.h"
1313

14+
#import "QNDefine.h"
1415
#import "QNConfig.h"
1516
#import "QNDnsCacheFile.h"
1617
#import "QNUtils.h"
@@ -601,9 +602,11 @@ - (QNDnsManager *)httpDns{
601602
QNDnsManager *httpDns = [[QNDnsManager alloc] init:@[systemDnsresolver, dnspodFree]
602603
networkInfo:nil];
603604

604-
__weak typeof(self)weakSelf = self;
605+
kQNWeakSelf;
605606
httpDns.queryErrorHandler = ^(NSError *error, NSString *host) {
606-
weakSelf.lastPrefetchedErrorMessage = [error localizedDescription];
607+
kQNStrongSelf;
608+
609+
self.lastPrefetchedErrorMessage = [error localizedDescription];
607610
};
608611
_httpDns = httpDns;
609612
}

QiniuSDK/Http/QNResponseInfo.m

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ - (BOOL)couldRetry {
211211
- (BOOL)couldRegionRetry{
212212
if ([self couldRetry] == NO
213213
|| _statusCode == 400
214-
|| _statusCode == 502 || _statusCode == 503 || _statusCode == 504 || _statusCode == 579 || _statusCode == 599
214+
|| _statusCode == 502 || _statusCode == 503 || _statusCode == 579 || _statusCode == 599
215215
|| self.isCancelled) {
216216
return NO;
217217
} else {
@@ -220,8 +220,7 @@ - (BOOL)couldRegionRetry{
220220
}
221221

222222
- (BOOL)couldHostRetry{
223-
if ([self couldRegionRetry] == NO
224-
|| (_statusCode == 502 || _statusCode == 503 || _statusCode == 571)) {
223+
if ([self couldRegionRetry] == NO || _statusCode == 571) {
225224
return NO;
226225
} else {
227226
return YES;

QiniuSDK/Http/Request/HttpClient/UrlProtocol/QNCFHttpClient.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// Copyright © 2020 com.qiniu. All rights reserved.
77
//
88

9+
#import "QNDefine.h"
910
#import "QNCFHttpClient.h"
1011
#import "NSURLRequest+QNRequest.h"
1112

@@ -332,9 +333,9 @@ - (void)createTimer{
332333
[self invalidateTimer];
333334
}
334335

335-
__weak typeof(self) weakSelf = self;
336+
kQNWeakSelf;
336337
NSTimer *timer = [NSTimer timerWithTimeInterval:0.5
337-
target:weakSelf
338+
target:weak_self
338339
selector:@selector(timerAction)
339340
userInfo:nil
340341
repeats:YES];

QiniuSDK/Http/Request/QNHttpRegionRequest.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// Copyright © 2020 Qiniu. All rights reserved.
77
//
88

9+
#import "QNDefine.h"
910
#import "QNAsyncRun.h"
1011
#import "QNHttpRegionRequest.h"
1112
#import "QNConfiguration.h"
@@ -132,12 +133,15 @@ - (void)performRequest:(id <QNUploadServer>)server
132133
[request setAllHTTPHeaderFields:headers];
133134
[request setTimeoutInterval:self.config.timeoutInterval];
134135
request.HTTPBody = body;
136+
137+
kQNWeakSelf;
135138
[self.singleRequest request:request
136139
server:server
137140
toSkipDns:toSkipDns
138141
shouldRetry:shouldRetry
139142
progress:progress
140143
complete:^(QNResponseInfo * _Nullable responseInfo, NSArray<QNUploadSingleRequestMetrics *> * _Nullable metrics, NSDictionary * _Nullable response) {
144+
kQNStrongSelf;
141145

142146
[self.requestMetrics addMetricsList:metrics];
143147

QiniuSDK/Http/Request/QNHttpSingleRequest.m

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// Copyright © 2020 Qiniu. All rights reserved.
77
//
88

9+
#import "QNDefine.h"
910
#import "QNAsyncRun.h"
1011
#import "QNVersion.h"
1112
#import "QNUtils.h"
@@ -95,25 +96,29 @@ - (void)retryRequest:(NSURLRequest *)request
9596
self.client = [[QNUploadSystemClient alloc] init];
9697
}
9798

98-
__weak typeof(self) weakSelf = self;
99+
kQNWeakSelf;
99100
BOOL (^checkCancelHandler)(void) = ^{
100-
BOOL isCancelled = weakSelf.requestState.isUserCancel;
101-
if (!isCancelled && weakSelf.uploadOption.cancellationSignal) {
102-
isCancelled = weakSelf.uploadOption.cancellationSignal();
101+
kQNStrongSelf;
102+
103+
BOOL isCancelled = self.requestState.isUserCancel;
104+
if (!isCancelled && self.uploadOption.cancellationSignal) {
105+
isCancelled = self.uploadOption.cancellationSignal();
103106
}
104107
return isCancelled;
105108
};
106109

107110
[self.client request:request connectionProxy:self.config.proxy progress:^(long long totalBytesWritten, long long totalBytesExpectedToWrite) {
111+
kQNStrongSelf;
108112

109113
if (checkCancelHandler()) {
110-
weakSelf.requestState.isUserCancel = YES;
111-
[weakSelf.client cancel];
114+
self.requestState.isUserCancel = YES;
115+
[self.client cancel];
112116
} else if (progress) {
113117
progress(totalBytesWritten, totalBytesExpectedToWrite);
114118
}
115119

116120
} complete:^(NSURLResponse *response, QNUploadSingleRequestMetrics *metrics, NSData * responseData, NSError * error) {
121+
kQNStrongSelf;
117122

118123
if (metrics) {
119124
[self.requestMetricsList addObject:metrics];

0 commit comments

Comments
 (0)