NSMutableArray使用中遇到的内存问题

NSMutableArray* array1 = [[NSMutableArray alloc] init];
NSMutableArray* array2 = [[NSMutableArray alloc] init];
- (void)pushs:(NSInteger)VALUE {
    BOOL find = NO;
    [array2 removeAllObjects];
    for (NSNumber* item in array1) {
        NSInteger value = [item intValue];
        if (value == VALUE) {
            [array1 removeAllObjects];

            [array1 addObjectsFromArray: array2];
            [array1 addObject: item];
            find = YES;
            break;
        }
        else {
            [array2 addObject: item];
        }
    }
    if (!find) {
        NSNumber* newItem = [NSNumber numberWithInt: VALUE];
        [viewTypeArray addObject:newItem];
    }
}


if (value == VALUE)后,[array1 addObject: value];执行后,看array1中的元素类型发现不再NSNumber*而是变为NSobject*, 取出使用报错,bad access。该问题几率比较随机。单独使用没有任何问题,放到整个工程中就出现问题。


过查看内存,发现NSMutableArray中存NSNumber,array1和array2中指地址一致,有可能是当[array1 removeAllObjects];后,item有可能被自动销毁致加入到array1中的现错误。修改为:

            NSNumber* topItem = [NSNumber numberWithInt: value];

            [array1 addObject:topItem];

问题解决。问题的根本原因是内存的问题,objective-c的内存管理比特殊,有很多隐藏的内存分配和自回收,个人怀numberWithInt方法返回的NSNumber*对象为autorelease。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值