为什么我不能在Obj-C中声明一个变量名为"newVariable"的变量?

14 浏览
0 Comments

为什么我不能在Obj-C中声明一个变量名为"newVariable"的变量?

我得到的错误

错误: 属性的合成getter方法遵循Cocoa命名约定,用于返回'owned'对象
/Users/.../ViewController.h:12:40: 
注意: 属性在这里声明
@property (nonatomic, retain)NSString *newString;

为什么我不能在变量名开头使用new?(比如 newString

0
0 Comments

在Objective-C中,无法像"newVariable"这样声明变量的原因是这种命名约定已经在Objective-C中使用了。为了让这个工作,你需要使用像简单的myString这样的命名。这是一个编译器的问题 - 编译器很挑剔。

解决方法是使用Objective-C中已经被允许的命名约定来声明变量,例如使用myString来替代"newVariable"。这样编译器就不会报错了。

0
0 Comments

在Objective-C中,声明一个属性会生成两个访问器方法(getter/setter):

-(NSString*)newString;
-(void)setNewString:(NSString*)newString;

Objective-C编译器会强制执行一种内存管理的命名规范。以new(还有"alloc"、"copy"、"mutableCopy")开头的方法要求返回一个由调用者"拥有"的对象。可以参考文档。然而,生成的访问器方法并不遵循这个规则。

这就是为什么无法像"newVariable"这样声明一个变量的原因。编译器会将这个声明解析为生成一个名为newVariable的访问器方法,但这个方法并不符合命名规范。

解决这个问题的方法是遵循命名规范,不要使用以"new"开头的名称来声明变量。如果确实需要使用这样的名称,可以考虑使用其他命名方式来避免冲突,比如在变量前面加上下划线或其他前缀。例如,可以声明一个名为_newVariable的变量。这样做可以避免与访问器方法冲突,同时也符合Objective-C的命名规范。

0