仪器报告泄漏,只需使用NSURLConnection:
#import <Foundation/Foundation.h>
int main (int argc, char ** argv)
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSURLRequest *theRequest = [NSURLRequest
requestWithURL:[NSURL URLWithString:@"https://gmail.com/"]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:60.0];
[NSURLConnection connectionWithRequest:theRequest delegate:nil];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:5]];
[pool drain];
[NSThread sleepForTimeInterval:10]; // wait for Instruments to check
}
泄漏堆栈跟踪:
0 CoreFoundation __CFBasicHashRehash
1 CoreFoundation CFDictionaryCreate
2 CFNetwork _getConnectionInfoForProxy
3 CFNetwork HTTPProtocol::createStream()
4 CFNetwork HTTPProtocol::createAndOpenStream()
5 CFNetwork executionContextPerform(void*)
6 CoreFoundation __CFRunLoopDoSources0
7 CoreFoundation __CFRunLoopRun
8 CoreFoundation CFRunLoopRunSpecific
9 CoreFoundation CFRunLoopRunInMode
10 Foundation +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:]
11 Foundation -[NSThread main]
12 Foundation __NSThread__main__
13 libSystem.B.dylib _pthread_start
14 libSystem.B.dylib thread_start
如果网址只是普通的http并且它没有重定向到https网站,则不会泄漏。
如何修复泄漏?
我正在使用Snow Leopard,我有http和https的代理。
答案 0 :(得分:0)
我认为你问的是错误的问题。这是你应该问的问题:
在您的情况下,答案分别为(是)和“否”。您很可能在Cocoa框架中发现了内存泄漏。但是在这种情况下,我认为你没有。你看,当前线程的NSRunLoop
保留NSURLConnection
,所以你可能没有给运行循环足够的时间来释放连接或其他东西。
重点是,你没有做错任何事,所以不要恐慌。