iOS:不明确的属性综合行为。 inheritance关系
我正在使用AppCode
,它在一个非常大的项目的代码中标记了一个有趣的情况。 弧前。
子类定义并合成一个名为delegate的属性。 其实财产声明已经被注释掉了! 但@synthesize delegate = delegate_;
声明被抛在后面。
代码编译,大概是因为基类定义和综合了一个也称为委托的属性,并与具有相同名称的支持variables合成: @synthesize delegate = delegate_;
我的问题是:一个消息发生什么事发送给委托
a)基类方法和
b)在分类方法中。
AppCode
将子类中的合成语句标记为错误:
属性“委托”的访问者已经与实例variables“delegate_”合成
@synthesize
指令是根据同名属性的规范(primefaces性,内存pipe理)创build存取方法和ivar的简写。 鉴于此,在子类中重新合成一个属性(不重新声明它)就像覆盖访问器方法一样 – 使用子类的实现而不是超类。 由于在这两种情况下编译器都创build了这些实现,所以在行为上没有明显的区别。
其中一个区别是,合成的伊娃与@私人伊娃拥有相同的可视性,因此子类无法访问它,包括将其用作属性的后备variables。 这意味着子类中的重新合成必须使用不同的伊娃名称。 如果超类具有@synthesize wildHorses = wildHorses_;
,那么编译器要求子类做类似@synthesize wildHorses = equusFerus;
*。
*如果超类使用创build的伊娃的默认名称, @synthesize wildHorses;
那么子类仍然必须合成一个新的variables: @synthesize wildHorses = wildHorses_;