简体   繁体   English

iPhone-Objective-C NSURL内存泄漏严重

[英]iPhone - Objective-C NSURL Memory Leaks galore

I am getting the following memory leak when using NSURL . 使用NSURL时出现以下内存泄漏。 I use this method in quite a few different places and receive memory leaks all the time using the Leaks instruments. 我在许多不同的地方使用此方法,并且始终使用Leaks仪器接收内存泄漏。

Object Management: 对象管理:

self.objManager = [[HJObjManager alloc] init];
NSString *cacheDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Caches/App"];
HJMOFileCache *fileCache = [[[HJMOFileCache alloc] initWithRootPath:cacheDirectory] autorelease];
self.objManager.fileCache = fileCache;
fileCache.fileCountLimit = 100;
fileCache.fileAgeLimit = 60*60*24;
[fileCache trimCacheUsingBackgroundThread];

Where it's used: 使用位置:

HJManagedImageV *mi = [[[HJManagedImageV alloc] initWithFrame:CGRectMake(self.myHeaderView.profilePictureImageView.bounds.origin.x,
                                                                         self.myHeaderView.profilePictureImageView.bounds.origin.y,
                                                                         self.myHeaderView.profilePictureImageView.bounds.size.width,
                                                                         self.myHeaderView.profilePictureImageView.bounds.size.height)] autorelease];

mi.layer.masksToBounds = YES;
mi.layer.cornerRadius = 8.0;
mi.layer.borderColor = [[UIColor blackColor] CGColor];
mi.layer.borderWidth = 1.0;

mi.url = [NSURL URLWithString:profilePictureUrl];
[mi showLoadingWheel];

[self.myHeaderView.profilePictureImageView addSubview:mi];
[self.objManager manage:mi];

Dealloc: 解除分配:

- (void)viewDidUnload {
    self.tv = nil;
    self.friends = nil;
    self.sortedFriends = nil;
    self.detailView = nil;
    self.profileView = nil;
    self.objManager = nil;
    [super viewDidUnload];
}

- (void)dealloc {
    [tv release];
    [friends release];
    [sortedFriends release];
    [detailView release];
    [profileView release];
    [objManager release];
    [super dealloc];
}

在此处输入图片说明

You can use stack trace to determine the place of leak. 您可以使用堆栈跟踪来确定泄漏的位置。

Edit: 编辑:

make sure you are releasing the mi.url in dealloc method: 确保在dealloc方法中释放mi.url:

-(void) dealloc {
   //some other releases
   self.url = nil;

   [super dealloc];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM