为啥我不能在 Obj-C 中声明像“newVariable”这样的变量? [复制]

Posted

技术标签:

【中文标题】为啥我不能在 Obj-C 中声明像“newVariable”这样的变量? [复制]【英文标题】:Why can't I declare a variable like "newVariable" in Obj-C? [duplicate]为什么我不能在 Obj-C 中声明像“newVariable”这样的变量? [复制] 【发布时间】:2013-03-12 15:41:48 【问题描述】:

我遇到的错误

error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
/Users/.../ViewController.h:12:40: 

note: property declared here
@property (nonatomic, retain)NSString *newString;

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

【问题讨论】:

因为这些命名约定是由编译器强制执行的。 所以它在 obj -c 编码中还有其他用途? 因为 new for 约定用于返回被调用者保留的对象的方法 解释见这里:***.com/questions/6327448/… 【参考方案1】:

声明一个属性会综合两个访问器(getter/setter)方法:

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

Objective-C 有一个由编译器强制执行的内存管理命名约定。以new(也称为“alloc”、“copy”、“mutableCopy”)开头的方法需要返回一个将由调用者“拥有”的对象。请参阅documentation。生成的访问器方法不符合规则。

【讨论】:

【参考方案2】:

此命名约定已在 Objective-C 中使用。您将需要使用类似简单的旧myString 来完成这项工作。这是编译器的事情 - 编译器是挑剔的。

【讨论】:

以上是关于为啥我不能在 Obj-C 中声明像“newVariable”这样的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在接口中声明静态方法?

为啥我不能在类声明中放置“使用”声明?

为啥 Apache 忽略我的 VirtualHost 声明?

为啥我不能在我的程序中声明一个字符串:“字符串是未声明的标识符”

为啥在 Gradle 中不能将属性声明为输出?

为啥我不能使用双冒号在命名空间中前向声明一个类?