iOS:Objective-C 创建类属性错误:使用未声明的标识符
Posted
技术标签:
【中文标题】iOS:Objective-C 创建类属性错误:使用未声明的标识符【英文标题】:iOS: Objective-C creating class property error: Use of undeclared identifier 【发布时间】:2017-08-04 19:00:34 【问题描述】:我正在尝试使用 example 之后的类属性。但我收到以下错误:“使用未清除的标识符 '_myProperty'”。
这是我的实现:
@interface myClass()
@property (class,strong,nonatomic) NSString *myProperty;
@end
+ (NSString*)myProperty
if (!_myProperty)
return [NSString new];
为什么我会收到此错误?或者你们中的任何人都知道解决这个问题?
非常感谢您的帮助
【问题讨论】:
我不熟悉 Objective-c 语法,但问题似乎你的变量 myProperty 像计算变量 a getter 一样工作。您没有在任何地方声明,换句话说,没有提供任何初始值。对不起,如果我误解了。 【参考方案1】:类属性不会在 Objective-C 中合成。您必须提供自己的支持变量和自己的 getter/setter:
static NSString *_myProperty = nil;
+ (NSString *)myProperty
if (!_myProperty)
_myProperty = [NSString new];
return _myProperty;
+ (void)setMyProperty:(NSString *)myProperty
_myProperty = myProperty;
【讨论】:
【参考方案2】:类属性并且永远不会自动合成,必须实现 getter 和/或 setter,并且不会为它们自动创建支持变量。
如果您的属性需要一个必须声明的变量,请在实现文件中使用static
全局变量——这实际上是Objective-C 中的“类变量”。或者,如果您只需要一个 getter,您可以声明一个局部于 getter 本身的 static
变量,进一步降低其可见性并将 getter 和变量作为一个包保持在一起。
HTH
【讨论】:
【参考方案3】:实际上,类属性不是类的成员。所以它将立即创建,所有实例都将使用这个。所以没有什么可以合成的。
【讨论】:
以上是关于iOS:Objective-C 创建类属性错误:使用未声明的标识符的主要内容,如果未能解决你的问题,请参考以下文章