NSMutableArray内存困境

时间:2011-04-04 12:42:14

标签: iphone objective-c xcode ios nsmutablearray

我有一个结果类,其中包含一个导致内存泄漏的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;
}

我坚持试图让这个内存泄漏消失。 非常感谢任何帮助。

2 个答案:

答案 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];