-(void) setCity: (NSString*) c{
[c retain];//---1
[city release];//---2
city=c;//---3
}
这是强引用
第二行代码是为了防止 city 可能已经指向了一个对象,如果不先对
city 进行一次 release,而直接把 city 指向 c 指向的对象,那么 city 原来指向的对象可能会出
现内存泄漏,因为 city 在改变指向的时候,没有将原来指向的对象的引用计数器减 1,违反
了你 retain 对象之后,要在恰当的时刻 release 对象的要求。
可是万一city本来就没有指向其它对象retaincount为默认的1 那么执行第二行后就为0,接着就被回收了 所以这种情况下以上代码是错误的 不知道我的结论对不对
------解决方案--------------------
谁申请就谁释放。
c retain, 那么待会c就需要release。
第二行city没retain就release不合理。
第三行city = [c retain],后面再release就可以了。