在学Your Second iOS App 时候,代码里有地方用到
- (void)setSighting:(BirdSighting *) newSighting
{
if (_sighting != newSighting) {
_sighting = newSighting;
// Update the view.
[self configureView];
}
}
自己试着把_sighting换成self.sighting 就报错了。。
不知道这两种调用方法是什么区别,网上也看了好多,都感觉不是很明白,谢谢您了
- (void)setSighting:(BirdSighting *) newSighting
{
if (_sighting != newSighting) {
_sighting = newSighting;
// Update the view.
[self configureView];
}
}
自己试着把_sighting换成self.sighting 就报错了。。
不知道这两种调用方法是什么区别,网上也看了好多,都感觉不是很明白,谢谢您了
在程序运行到此语句时,会调用类中相应的setter方法,但如果你自己也实现了setter方法,那么系统在编译时就不再为你自动生成setter方法,而是使用你自己指定的setter方法。你上面的代码中已声明了自己的setter方法,在使用这个属性时会被调用。说到这里你应该也明白你上述的_sighting 为什么不能用self.signting来替换。如果替换了当在执行这个语句时,你想过会发生什么?
if (self.sighting != newSighting) {
self.sighting = newSighting;
// Update the view.
[self configureView];
}当程序运行到self.sighting时又会调用类的setSighting方法。程序会陷入死循环。