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中造成循环引用。