Objective-C运行时如何处理在类中定义为弱的
属性,但类中的私有
类定义与其相同的
名称和类型的
属性?
在类的上下文中运行的代码是否使用原始(弱)修饰符,还是使用类别定义的修饰符(强)?
例如:
Name.m
@property (weak,nonatomic) Nsstring *name;
NameTests.m
@interface Name (Test)
@property (strong,nonatomic) Nsstring *name;
@end
在
属性声明中,弱只适用于合成的setter
方法(如果有的话)和合成实例变量(如果有的话).如果这两者都不合成,则弱者无效.
如果setter和instance变量是合成的,那么问题是:哪个属性声明是编译器用来合成setter和instance变量?
编译器将永远不会合成在命名类别中声明的属性.所以在你的例子中,name是一个弱的属性.