在现代运行时。您可以声明属性,而无需在接口中声明同名 ivar,例如
@interface MyClass: NSObject
{
NSString *str2;
}
@property (retain) NSString *str1;
@property (retain) NSString *str2;
@end
而且我知道,这会自动为您生成一个 str1 ivar,因为在实现中,您可以同时访问两者self.str1
或纯粹访问str1
。
但我的问题是,str1和str2有什么区别吗?
如果它们相同,为什么类扩展(没有名称的类别)允许添加一个新的声明属性,该属性也会生成一个 ivar,但不允许在类扩展中添加一个 ivar 实例?(我知道 LLVM 2.0 或更高版本允许这但 gcc 没有)