内存优化(一)清理数组占用的内存

1.首先在viewDidLoad方法中创建一系列对象并且加入数组中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.marray = [[NSMutableArray alloc] init];
    
    for (int i = 0; i < 1000000; i++) {
        NSString *tempstr = [NSString stringWithFormat:@"%i", i];
        [self.marray addObject:tempstr];
    }
}

以上代码中创建了1000000个NSString对象,并让tempstr指针持有,而在每一次for循环结束后释放tempstr指针对对象的引用。

这里的marray是strong类型,将持有对对象的强引用:

@property (strong, nonatomic) NSMutableArray *marray;


在marray数组中加入tempstr指向的对象,也就是让marray持有这些对象。如果view controller一直存在,或者不主动释放marray对这些对象的持有,那么这1000000个对象将一直在内存中驻留。


2.在viewDidDisappear方法或在接收到内存警告后主动释放marray对对象的持有:

- (void)viewDidDisappear:(BOOL)animated {
    self.marray = [[NSMutableArray alloc] init];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    
    self.marray = [[NSMutableArray alloc] init];
}

模拟内存警告的方法:Command + Shift + M。

self.marray = [[NSMutableArray alloc] init];使得self.marray指向另一个重新创建的数组对象,并释放对原来对象的持有,所以原来的1000000个字符串对象没有任何指针持有,从而被内存回收。


看看内存的使用情况:

1.在加载view成功后内存使用了43.6MB。



2.执行视图跳转将导致viewDidDisappear方法的调用,或者模拟内存警告,使用的Memory将降为24.6MB。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值