iOSInterviewQuestions
iOSInterviewQuestions copied to clipboard
上篇第11题,@dynamic那里说明有点问题
@dynamic重点是为了告诉编译器,这个属性的方法在运行时动态提供实现,虽然这也同时表明不需要给这个属性自动生成getter\setter方法,但我觉得后者不是重点,只是附带带来的效果而已。我猜是因为题目是跟@synthesize一起比较,为了凸显区别,所以才导致这么写。
@dynamic重点是为了告诉编译器,这个属性的方法在运行时动态提供实现
这是什么意思?在运行时也不会生成存取方法吧?
那就不是动态实现了吧,就是人为提供了。
是这样理解吗?我对这块还不是很了解,请指教
@lych0317 方法实现是可以替换的啊,class_addMethod可以更改实际运行的代码。@dynamic就是说这个属性的方法会在运行时可以改变。
动态不是只人不人为吧,代码都是人写的。我理解的动态是方法的执行是编译时就确定还是运行时确定
我理解的动态是方法的执行是编译时就确定还是运行时确定
对,我也是这么认为。刚才是我描述的不对,应该是@synthesize是系统自动生成存取方法,而@dynamic不会自动,对吗?
@lych0317 不会生成,刚验证了下,使用.xxx访问属性会崩溃。不过NSManagedObject的子类属性也是@dynamic访问没有问题,估计是coreData框架本身给属性提供了访问方法
@dynamic 语义是让编译器不生成对应的setter , getter , ivar 。仅提供setter & getter 的方法声明。效果类似于protocol中声明的property 。