Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c IApp正在泄漏内存_Objective C_Memory Leaks_Afnetworking 2 - Fatal编程技术网

Objective c IApp正在泄漏内存

Objective c IApp正在泄漏内存,objective-c,memory-leaks,afnetworking-2,Objective C,Memory Leaks,Afnetworking 2,我通过仪器运行我的应用程序,看看是否有内存泄漏。我注意到有两处泄漏。仅在启动时发生一次泄漏,即: 第4行是这里有问题的代码: 我发现最大的漏洞实际上是网络代码。不过,我不确定是不是我正在做的某件事导致了它。在类文件中:AFURLSessionManager.m 上述方法中的这些行显示为内存泄漏-每次调用此方法时: if (!configuration) { configuration = [NSURLSessionConfiguration defaultSessionConfigu

我通过仪器运行我的应用程序,看看是否有内存泄漏。我注意到有两处泄漏。仅在启动时发生一次泄漏,即:

第4行是这里有问题的代码:

我发现最大的漏洞实际上是网络代码。不过,我不确定是不是我正在做的某件事导致了它。在类文件中:AFURLSessionManager.m

上述方法中的这些行显示为内存泄漏-每次调用此方法时:

  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];
        }
    }];