美文网首页
YYModel解析出来的属性不能用readonly修饰

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

作者: 奔哥小木屋 | 来源:发表于2016-11-28 16:15 被阅读180次

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

  • 老项目中用的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修饰

    改换库的过程中发现的问题. 老项目中用的Mantle, 有点不好用, 要换成YYModel, 换好之后, 项目终于...

  • OC中使用readonly并不一定是安全的

    作用 readonly修饰的属性,只能读取值,不能修改值。原因:readonly修饰的属性只生成了getter方法...

  • php8.2新特性

    添加了readonly 类修饰符,这个类的所有属性都会变成readonly。 添加了交集类型 动态属性被废弃,现在...

  • iOS 基础知识点

    一、属性修饰符 读写属性: (readwrite/readonly) 语义特性:(内存有关):(assign/re...

  • OC语言之属性关键字

    属性关键字 读写权限 readonly readwrite(默认) 原子性 OC中的属性可以修饰成nonatomi...

  • iOS - 修改readonly修饰的属性

    readonly:只读属性,只生成getter方法,也就是说只能访问变量,不能修改。 那我们如果想要改变类中声明为...

  • 美团外卖

    1.属性都有哪些修饰符? assign、strong、copy、readonly、readwite、weak、un...

  • TypeScript面向对象

    TypeScript面向对象 readonly 单层修饰只读属性。 构造器 构造方法。 方法 Getters/Se...

  • Kotlin的延迟初始化: lateinit var和by la

    lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型(因为...

  • @property 修饰符

    1. 读写修饰符 readwrite | readonly readwrite:系统为我们创建这个属性的sette...

网友评论

      本文标题:YYModel解析出来的属性不能用readonly修饰

      本文链接:https://www.haomeiwen.com/subject/pneopttx.html