Effiective objecttive -c2.0 这本书说 在初始化方法和dealloc方法总是应该通过实例变量来读写数据,看了半天没看懂原因到底是为什么?有看这本书的吗?
Effiective objecttive -c2.0 这本书说 在初始化方法和dealloc方法总是应该通过实例变量来读写数据,看了半天没看懂原因到底是为什么?有看这本书的吗?
2 回答1.1k 阅读
1 回答1.2k 阅读✓ 已解决
1 回答2.8k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答949 阅读
1 回答789 阅读
2.8k 阅读
1 回答5.7k 阅读✓ 已解决
2 回答4.6k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答10.9k 阅读✓ 已解决
书中不是讲的很清楚吗:
_name = @"Jack"
不经过setter的消息发送,直接为变量赋值,速度快。对于以下的
name
属性:直接赋值是:
_name = @"Jack";
,通过self.name = @"Jack"
其实等同于_name = @"Jack".copy
;self.name = @"Jack"
会触发KVO,_name = @"Jack"
不会self.name = @"Jack"
可以在 setter 方法中进行断点调试,每次赋值你都知道。所以有一种合理折中方案就是,读取数据的时候用
NSString *str = _name
,赋值用self.name = @"Jack"
。另外需要注意的是子类可能复写setter方法,用
self.name = @"Jack"
可能不等同于_name = @"Jack".copy
。没有明白你哪里不清楚,只能用我的思路简单描述一下。