[[NSMutableArray alloc] init]与[NSMutableArray array]

IOS开发的细节问题,同时也体现了开发者对基本原理的掌握程度。很多人不知道如下两个方法创建数组的区别:

  1. NSMutableArray *array = [NSMutableArray array];
  2. NSMutableArray *array = [[NSMutableArray alloc] init];

谁能说清楚这两种方式的区别?

说区别之前,咱先说说可能会出现的问题:

我们在UIViewController中建立一个数组用来存储网络传回的数据,以更新table时候使用。比如我们这样建立 : NSMutableArray *tableDataArr = [NSMutableArray array]; 界面显示数据的时候,似乎没有什么问题。不过当我们滑动tableView加载更多cell的时候,崩溃了!

来,咱说说为啥会出现上面的异常:

array 这个方法,其实OC已经帮你自动创建了自动释放池,所以我们不用管理内存释放的问题。所以,比较适合临时对象,不适合全局对象。

当绘制了第一屏幕的cell数据时候,一个Runloop周期似乎结束了,这没有什么问题。一旦我们继续操作表,上拉加载更多的数据cell,新的事件产生了,不过这一轮的事件循环中tableDataArr已经被回收了。所以,我们的程序崩溃了。

解决方式:对于全局数据保持的数组,最好用[[NSMutableArray alloc] init]。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. avatar gg 0

    必须含有中文