【问题标题】:Problems in memory management [closed]内存管理中的问题[关闭]
【发布时间】:2012-08-30 18:46:14
【问题描述】:

内存有问题有如下代码:

拥有 EXC_BAS_ACCESS

@interface MapList : NSObject
{
    NSArray* m_units;
}
-(MapList*) loadMapListWithLevel:(uchar) lvl chapter: (uchar) chapt;
-(void) dealloc;
@end

和实施:

-(MapList*) loadMapListWithLevel:(uchar) lvl chapter: (uchar) chapt
{
    self =[super init];
    if (self)
    {
         {
            ...

            NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:size];

            for (uint j=0;j<size;j++)
            {
                obj =[[SpriteDB alloc] init];
                [array addObject:obj];
                [obj release];
            }
            if (i==0)
                m_units = [NSArray arrayWithArray:array];

            [array release];
        }
        ...
    }
    return self;
}

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

在一种方法中,我这样称呼它们

MapList* mpl = [[MapList alloc] loadMapListWithLevel:level chapter:chapter];
[mpl release];

问题出在哪里?当我评论 [m_units release]; 时,它起作用了......

【问题讨论】:

    标签: objective-c ios memory-management exc-bad-access


    【解决方案1】:

    m_units = [NSArray arrayWithArray:array]; 给你一个自动释放的值。当您进行第二次释放时,您已过度释放此对象。即使在运行循环返回后访问该值也会给您带来内存问题。保留这个值,并在你的 dealloc 上释放它。另外,您应该使用properties

    【讨论】:

    • +1 我也强烈建议使用属性而不是实例变量(我什至不再声明实例变量,因为@synthesize 为我们创建了它们)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多