Objective c IApp正在泄漏内存
我通过仪器运行我的应用程序,看看是否有内存泄漏。我注意到有两处泄漏。仅在启动时发生一次泄漏,即: 第4行是这里有问题的代码: 我发现最大的漏洞实际上是网络代码。不过,我不确定是不是我正在做的某件事导致了它。在类文件中:AFURLSessionManager.m 上述方法中的这些行显示为内存泄漏-每次调用此方法时:Objective c IApp正在泄漏内存,objective-c,memory-leaks,afnetworking-2,Objective C,Memory Leaks,Afnetworking 2,我通过仪器运行我的应用程序,看看是否有内存泄漏。我注意到有两处泄漏。仅在启动时发生一次泄漏,即: 第4行是这里有问题的代码: 我发现最大的漏洞实际上是网络代码。不过,我不确定是不是我正在做的某件事导致了它。在类文件中:AFURLSessionManager.m 上述方法中的这些行显示为内存泄漏-每次调用此方法时: if (!configuration) { configuration = [NSURLSessionConfiguration defaultSessionConfigu
if (!configuration) {
configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
}
self.operationQueue = [[NSOperationQueue alloc] init];
最差的一个显示泄漏最多:
self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];
这是:
self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init];
最后一个:
self.securityPolicy = [AFSecurityPolicy defaultPolicy];
我如何解决这些漏洞?另外,我想知道他们为什么会泄漏内存,而不仅仅是解决方案,我想知道更多关于这些情况的信息 试着在块中使用弱self,而不是self,例如:
__weak ClassName *weak_self = self;
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
for (NSURLSessionDataTask *task in dataTasks) {
[weak_self addDelegateForDataTask:task completionHandler:nil];
}
for (NSURLSessionUploadTask *uploadTask in uploadTasks) {
[weak_self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil];
}
for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
[weak_self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil];
}
}];
谢谢,我会做出改变,看看它是如何影响泄漏的。
self.securityPolicy = [AFSecurityPolicy defaultPolicy];
__weak ClassName *weak_self = self;
[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
for (NSURLSessionDataTask *task in dataTasks) {
[weak_self addDelegateForDataTask:task completionHandler:nil];
}
for (NSURLSessionUploadTask *uploadTask in uploadTasks) {
[weak_self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil];
}
for (NSURLSessionDownloadTask *downloadTask in downloadTasks) {
[weak_self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil];
}
}];