YYModel解析出来的属性不能用readonly修饰

改换库的过程中发现的问题.

  • 老项目中用的Mantle, 有点不好用, 要换成YYModel, 换好之后, 项目终于可以跑起来了, 但是解析总是出问题, 打断点, 追踪代码逻辑, 没有任何问题. 看返回的数据没有问题, 然而用YYModel就是解析不出来, 每次model.orderId都是nil, 特别奇怪, 但是细心的我(嘚瑟一下), 在断点的时候看到, 有值的属性都是(__NSCFString), 值为nil的属性都是(NSString), 我就在想问题是不是出在这里了.

  • 于是打开代码看一下, 发现原来定义属性是:
    @property (copy, nonatomic, readonly,nonnull) NSString *orderId;,
    我去掉readonly, 改成@property (copy, nonatomic ,nonnull) NSString *orderId;发现就没有问题了, 可以解析数据了.

延伸一下: 事实上, 即便在.h文件中用readonly修饰属性, 外面照样可以用KVC修改属性的值; 使用readonly的时候, 为了避免 KVC 修改属性值,须将定义属性所在类的类方法 + (BOOL)accessInstanceVariablesDirectly
重写,使其返回 NO.

你可能感兴趣的:(YYModel解析出来的属性不能用readonly修饰)