一、Xcode使用ARC来对内存进行管理,并不是像JAVA一样的垃圾回收机制,ARC不负责回收内存,而是在代码合适的地方插入合适的内存管理代码(retain、release、autorelease)。
ARC中,判断对象是否该销毁靠的是“强指针”,而不是MRC中的引用计数器,默认的指针都是强指针。所以在ARC中要提前释放一个对象,只需要设置指向该对象的指针为空即可:p = nil;因为当没有强指针指向这个对象时,这个对象就会被销毁。
__weak弱指针对所指的对象没有拥有权(就是指着而已),一旦弱指针所指的对象销毁了(再也没有其他强指针指着了),这个弱指针就会被置为nil,不会变成野指针,这也是ARC的智能之处。
注意:创建对象时,不能使用弱指针来引用,否则刚创建的对象因为被弱指针指着立马就被销毁了没有任何意义,所以创建对象一定是用强指针来引用,然后才可以将这个对象赋给其他弱指针变量使用。
注:@property (nonatomic,strong)Person *person;
@property (nonatomic,weak)Dog *dog;
strong和weak都是来修饰对象属性的,对于基本数据类型属性依然用assign来修饰。
二、循环引用
解决办法: