Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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
如何在iOS中解决此警告?内存泄漏_Ios_Memory_Memory Leaks_Warnings - Fatal编程技术网

如何在iOS中解决此警告?内存泄漏

如何在iOS中解决此警告?内存泄漏,ios,memory,memory-leaks,warnings,Ios,Memory,Memory Leaks,Warnings,函数中的这一行创建了一个警告:PerformSelector可能会导致内存泄漏,因为它的选择器未知。我做错了什么 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { [_delegate1 performSelector:_selector1 withObject:json]; } 下面是performSelector的方法 - (void)HttpRequest:(NSURL*)url PostString

函数中的这一行创建了一个警告:PerformSelector可能会导致内存泄漏,因为它的选择器未知。我做错了什么

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

[_delegate1 performSelector:_selector1 withObject:json];

}
下面是performSelector的方法

- (void)HttpRequest:(NSURL*)url PostString:(NSString *)poststring method:(int)method withselector:(SEL)selector withdelegate:(id)delegate
{    

 _responseData = [[NSMutableData alloc] init];
// procedures for parse at desired URL
request = [NSMutableURLRequest requestWithURL:url
                                  cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                              timeoutInterval:5];

// set HTTP method
if (method == 0) {
    [request setHTTPMethod:@"GET"];
    // asks xml response
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; }

_selector1 = selector ;
_delegate1 = delegate ;

[self startConnection];

return;
}

您没有做错什么。编译器导致警告,因为它还不知道选择器。 如果您在某个地方收到此警告,请使用

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
       [_delegate1 performSelector:_selector1 withObject:json];
#pragma clang diagnostic pop
如果有多个位置,则可以定义宏

#define SuppressPerformSelectorLeakWarning(Stuff) \
    do { \
        _Pragma("clang diagnostic push") \
        _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
        Stuff; \
        _Pragma("clang diagnostic pop") \
    } while (0)
然后在出现警告的所有位置使用宏

SuppressPerformSelectorLeakWarning(

   [_delegate1 performSelector:_selector1 withObject:json];
);

像这样调用每个选择器,它将取消警告

@user3178926欢迎!!