Iphone 具有3个NSMutableArray的类中存在内存泄漏。为什么?
我在我创建的一个类中发现了一个内存泄漏。这是一节课: h 这个类有3个NSMutableArray,我将在其中存储数据。为了准备和初始化这个类,我在创建3个数组的地方开发了initialize方法。在Dealoc中,这些数据被释放 每次使用此类时,泄漏工具都会检测到泄漏,因为initialize方法无效 初始化这些数组的最佳方法是什么 谢谢 编辑 嗨,我已经用RDItem解决了这个漏洞,但现在出现了另一个类似类的lear: h 现在我发现这些管线有漏洞:Iphone 具有3个NSMutableArray的类中存在内存泄漏。为什么?,iphone,xcode,instruments,memory-leaks,Iphone,Xcode,Instruments,Memory Leaks,我在我创建的一个类中发现了一个内存泄漏。这是一节课: h 这个类有3个NSMutableArray,我将在其中存储数据。为了准备和初始化这个类,我在创建3个数组的地方开发了initialize方法。在Dealoc中,这些数据被释放 每次使用此类时,泄漏工具都会检测到泄漏,因为initialize方法无效 初始化这些数组的最佳方法是什么 谢谢 编辑 嗨,我已经用RDItem解决了这个漏洞,但现在出现了另一个类似类的lear: h 现在我发现这些管线有漏洞: self.items = [NSMuta
self.items = [NSMutableArray array];
self.colors = [NSMutableArray array];
self.textures = [NSMutableArray array];
self.styles = [NSMutableArray array];
任何人都能解释为什么现在发生在这堂课上而不是在RDItem课上?都一样:(
谢谢。这是一个更好的建议实施方案
-(void)initialize
{
self.colors = [NSMutableArray array];
self.textures = [NSMutableArray array];
self.styles = [NSMutableArray array];
}
-(void)dealloc
{
self.colors = nil;
self.textures = nil;
self.styles = nil;
}
在没有看到初始化RDItem的代码的情况下,我无法确定
但是我希望您在创建新的RDItem之前不会发布以前的RDItem。因此,请将代码张贴在您创建RDItem的位置,这样我们就可以确定,只要在需要时调用
init
就可以了。调用alloc
和init
将保留内容为nil
的数组。调用alloc
记住调用[super dealloc]作为dealloc;)的最后一条指令。我认为,泄漏发生在填充代码的数组中,而不是init。例如,您分配并初始化一些NSString,并将其放入NSMutable数组中,而不释放或自动释放它。或者类似的事情。让舒尔正确地填充阵列。尽管该实现似乎不会对您共享的代码行造成真正的内存泄漏。虽然我分享了一个更好的实现,但是你的代码没有泄漏。但我有几个问题:1)调用“初始化”方法多少次?2) 您是否释放插入可变数组的对象?并且不要忘记
[super dealoc]代码>。这是应用的解决方案:)谢谢@samfisher,你能解释一下为什么你选择将它们设置为nil
而不是release
ing吗?我原以为nil
只为viewDidUnload
中的IBOutlets设置的them@iNoob,self.object=nil调用您的setter,这将释放旧值,将成员设置为nilSee here(),以了解使用@property
和@synthesis
时“幕后”发生的情况。可能会帮助您更好地理解这些概念
#import <Foundation/Foundation.h>
@interface RDTema : NSObject {
}
@property int Id;
@property (nonatomic, retain) NSString *idManifest;
@property (nonatomic, retain) NSString *idTema;
@property (nonatomic, retain) NSString *nombre;
@property (nonatomic, retain) NSString *thumbnail;
@property (nonatomic, retain) NSString *thumbnailPush;
@property (nonatomic, retain) NSMutableArray *items;
@property (nonatomic, retain) NSMutableArray *colors;
@property (nonatomic, retain) NSMutableArray *textures;
@property (nonatomic, retain) NSMutableArray *styles;
-(void)initialize;
@end
#import "RDTema.h"
@implementation RDTema
@synthesize Id;
@synthesize idManifest;
@synthesize idTema;
@synthesize nombre;
@synthesize thumbnail;
@synthesize thumbnailPush;
@synthesize items;
@synthesize colors;
@synthesize textures;
@synthesize styles;
-(void)initialize
{
/*
self.items = [[NSMutableArray alloc] init];
self.colors = [[NSMutableArray alloc] init];
self.textures = [[NSMutableArray alloc] init];
self.styles = [[NSMutableArray alloc] init];
*/
self.items = [NSMutableArray array];
self.colors = [NSMutableArray array];
self.textures = [NSMutableArray array];
self.styles = [NSMutableArray array];
}
-(void)dealloc
{
[idManifest release];
[idTema release];
[nombre release];
[thumbnail release];
[thumbnailPush release];
[items release];
[colors release];
[textures release];
[styles release];
[super dealloc];
}
self.items = [NSMutableArray array];
self.colors = [NSMutableArray array];
self.textures = [NSMutableArray array];
self.styles = [NSMutableArray array];
-(void)initialize
{
self.colors = [NSMutableArray array];
self.textures = [NSMutableArray array];
self.styles = [NSMutableArray array];
}
-(void)dealloc
{
self.colors = nil;
self.textures = nil;
self.styles = nil;
}