我有一个结果类,其中包含一个导致内存泄漏的NSMutableArray。我一直在爬谷谷试图找出原因,但没有任何工作。
有人可以在这里看到内存泄漏吗?
@interface Response : NSObject
{
NSMutableArray *Items;
}
@property (nonatomic, retain) NSMutableArray *Items;
----
-(id)init {
self = [super init];
if (!self) {
return nil;
}
self.Items = [[NSMutableArray alloc] init];
return self;
}
-(void)dealloc
{
[self.Items release], self.Items = nil;
[Items release], Items = nil;
[super dealloc];
}
然后就像这样使用:
-(void)Update
{
Response *resp = [self getResponse];
foreach(GameObject *o in resp.items){
//Do Stuff
}
}
-(Response*)getResponse
{
Response *result = [[Response alloc] init];
//Loop through things
[result.items addObject:o];
//Finish looping stuff
return result;
}
我坚持试图让这个内存泄漏消失。 非常感谢任何帮助。
答案 0 :(得分:0)
非常确定您的Response对象正在泄漏,因为您分配/ init并返回它,并且永远不会调用dealloc。您应该在getResponse()
中将其标记为自动释放答案 1 :(得分:0)
以下行是问题......
self.Items = [[NSMutableArray alloc] init];
您的items属性具有'retain'属性,该属性可以提升保留计数,但您也可以从alloc获得保留计数1。所以改为做其中任何一个......
self.items = [[[NSMutableArray alloc] init] autorelease];
或
NSMutableArray *newArray = [[NSMutableArray alloc] init];
self.items = newArray;
[newArray release];