iOS [NSArray array] 和 [[NSArray alloc]init]

alloc (内存分配)以及init(初始化) Objective-C 协议分为非正式协议和正式协议。

这两个方式都是建立一个空的Array,[NSArray array]不需要release,使用autoreleasepool机制。

[[NSArray alloc] init]需要自己手动release。

项目使用崩溃实例:

在ViewDidLoad中,

jsonDataDic = [NSMutableDictionary dictionary]; 

 [self jsonParse];

创建一个空字典,在jsonParse中使用了这个词典,导致程序崩溃。

解决方法:在jsonDataDic前面加上self.即可

原因:不加的话,指针的作用域仅在ViewDidLoad中,进入jsonParse后该指针已释放,成为了一个野指针,再对其进行操作,使程序崩溃。

注意:字典是没有顺序的,字典的allkeys或者allvalues存放到数组中是随机的。


那self.和 _有什么区别呢,再说下这两个 :

self.programStack等于[self programStack],会走你的懒加载方法;

而_programStack类似于self->_programStack。

用self点出属性是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下划线的时候忽视了self这个指针,后者容易在block中造成循环引用。

你可能感兴趣的:(iOS [NSArray array] 和 [[NSArray alloc]init])