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。