//预声明协议
@protocol AnimalProtocol;
@protocol DogProtocol <AnimalProtocol>
@end
@protocol AnimalProtocol <NSObject>
@property (strong, nonatomic) NSNumber *name;
@end
@protocol CatProtocol <AnimalProtocol>
@end
若有Dog类实现DogProtocol协议,Cat类实现CatProtocol协议,
对于同样的json字符串
@{
@"name":"xiaohua"
}
使用YYModel解析后发现后会发现Dog.name == NULL而Cat.name== @"xiaohua"。
runtime打印Dog类和Cat类的属性列表后发现:
遵循DogProtocol的对象:
---property列表不包含AnimalProtocol中定义的变量
---Ivar列表包含AnimalProtocol中定义的变量
遵循CatProtocol的对象:
---property列表包含AnimalProtocol中定义的变量
---Ivar列表包含AnimalProtocol中定义的变量
由于YYModel是使用property列表来做映射的,因此Dog.name解析为NULL。
因此预声明协议这种方式会导致YYModel解析失败。
网友评论