【发布时间】:2014-08-13 16:01:10
【问题描述】:
我运行仪器工具并得到一些内存泄漏,我不知道如何处理这个问题。我正在使用 ARC!
这是我的代码:
+ (MARequest *)requestImageThumb:(NSString *)imageName
object:(NSInteger)objectId {
NSString* urlString = [NSString stringWithFormat:@"%@/%@", kBaseImageThumbURL, imageName];
LogTrace(@"Creating image thumb request for file %@", imageName);
//Here starts the leak!!
return [MARequest createWithURL:[NSURL URLWithString:urlString]
type:REQUEST_TYPE_GET_IMAGE];
}
+ (MARequest *)createWithURL:(NSURL *)url
type:(NSInteger)type {
MARequest* r = [[MARequest alloc] init];
r.url = url;
r.requestType = type;
r.responseData = [[NSMutableData alloc] init];
r.connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:r.url]
delegate:r
startImmediately:NO];
return r;
}
这里是我的 NSURLConnectionDelegate
#pragma mark - NSURLConnectionDelegate
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
LogTrace(@"request %@: didReceiveResponse", self.url);
[self.responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
LogTrace(@"request %@: didReceiveData, %d bytes", self.url, data.length);
[self.responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
LogTrace(@"request %@: didFailWithError: %@", self.url, [error description]);
self.connection = nil;
self.failed = YES;
[self invokeAction];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
LogTrace(@"request %@: connectionDidFinishLoading, %d bytes", self.url, [self.responseData length]);
self.connection = nil;
[self invokeAction];
}
编辑:
我现在将我的代码更改为这个,但遗憾的是它仍然给我一个内存泄漏......
+ (MARequest *)requestImageThumb:(NSString *)imageName
object:(NSInteger)objectId {
NSString* urlString = [NSString stringWithFormat:@"%@/%@", kBaseImageThumbURL, imageName];
LogTrace(@"Creating image thumb request for file %@", imageName);
return [MARequest requestWithURL:[NSURL URLWithString:urlString]
type:REQUEST_TYPE_GET_IMAGE];
}
+ (MARequest *)requestWithURL:(NSURL *)url
type:(NSInteger)type {
MARequest* r = [[MARequest alloc] init];
r.url = url;
r.requestType = type;
r.responseData = [[NSMutableData alloc] init];
r.connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:r.url]
delegate:r
startImmediately:NO];
return r;
}
【问题讨论】:
-
请再次显示静态编译器输出...
-
我加了两张截图,希望对你有帮助!
-
能否请您显示 GFRrequest 接口定义?顺便说一句,你注意到泄漏不是原来的地方......
标签: ios objective-c memory-management memory-leaks nsurlconnection