正如理查德指出的那样,没有大括号将 var 定义为全局变量。在声明实例变量方面,有两种方法:
在Objective-C 编程语言中,讨论了在@interface
或@implementation
.
因此,您可以在 中定义一个实例变量,这是您历史上最常见的定义实例变量的地方x
:@interface
@interface TestClass : NSObject
{
NSInteger x;
}
@end
@implementation TestClass
// define the methods
@end
但是,正如上面的链接描述的那样,您也可以在您的中定义它@implementation
(尽管按照惯例,我认为您不会经常看到这种情况):
@interface TestClass : NSObject
@end
@implementation TestClass
{
NSInteger x;
}
// define the methods
@end
实际上,您可以将实例变量放在第三个位置,在类扩展中(稍后在同一文档中讨论)。实际上,这意味着您可以将 .h 定义如下
// TestClass.h
@interface TestClass : NSObject
// define public properties and methods here
@end
和你的 .m 如下:
// TestClass.m
// this is the class extension
@interface TestClass ()
{
NSInteger x;
}
@end
// this is the implementation
@implementation TestClass
// define the methods
@end
最后一种方法(带有 .h@interface
的 .m 带有类扩展名和@implementation
)现在是 Xcode 模板在您创建新类时使用的格式。实际上,这意味着您可以将公共声明放在 .h 文件中,并将私有@property
和实例变量放在类扩展中。它只是让你的代码更简洁一些,避免你的 .h 文件(它实际上是你的类的公共接口)与私有实现细节混淆。对于实例变量,也许以前在 中定义实例变量的技术@implementation
是等效的,但我认为这不适用于@property
声明,在这种情况下,类扩展变得有用。