-(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,接着就被回收了 所以这种情况下以上代码是错误的 不知道我的结论对不对