由于MRR内存管理导致内存泄漏

时间:2013-09-04 16:27:43

标签: objective-c memory-leaks

我已经获得了一些无弧项目的代码

@interface TRSSImageDownloader()

@property (nonatomic, retain) NSMutableData *activeDownloadData;

@end
@implementation TRSSImageDownloader

@synthesize activeDownloadData = _activeDownloadData;

-(id)init {
       self = [super init];
       if (self) {
              _activeDownloadData = [NSMutableData new];
       }
       return self;
}

-(void)dealloc {
    [_activeDownloadData release];
    [super dealloc];
 }

它正在运行,但是当我通过" Profile" - >" Leaks"进行测试时,它会显示activeDownloadData上的内存泄漏

1 个答案:

答案 0 :(得分:2)

泄漏只会告诉您泄漏内存的分配位置。这并没有具体告诉您未能正确发布的位置。很可能你在其他地方错误地为_activeDownloadData分配了一些内容,或者你正在泄漏所有TRSSImageDownloader(因此,通过间接,也泄漏_activeDownloadData)。

这个问题的最常见原因是直接使用ivars。如果您在任何地方都使用访问者(initdealloc除外),这些问题往往很容易消失。如果直接在对象内使用ivars,则会出现这些问题。如果没有访问器,您需要直接审核分配给ivar的每个地方,并确保正确释放旧值。

如果可能的话,转换为ARC当然是推荐的解决方案。