我是Objective-C的新手,我无法理解MyClass.h中变量声明(firstString,secondString和thirdString)之间的区别是什么:
@interface MyClass {
NSString *firstString;
}
@end
MyClass.m中的:
@interface MyClass() {
NSString *secondString;
}
@end
@implementation MyClass
NSString *thirdString;
@end
我想第一种和第二种情况是一样的,但在什么情况下最好使用?
非常感谢!
答案 0 :(得分:3)
firstString
在标头中声明,该文件由其他类#import
编辑。它暴露给其他类,因此可以通过子类访问,并且由于符号在头文件中可用,外部对象通过key-value coding更改会更简单。
secondString
在您的实现文件中声明。 ()
中的@interface MyClass ()
表示这是class extension。 secondString
不会暴露给外部类(但是,与Objective-C中的所有内容一样,您不能认为它是真正的私有类。)
答案 1 :(得分:2)
第一个和第二个变量将是实例变量,而第三个变量将是文件范围的全局变量。通常,您应该使用实例变量并避免使用全局变量。
答案 2 :(得分:1)
三者之间没有功能差异,主要是能见度控制。
第一个是在你的类的公共头文件中声明的,这意味着你希望程序员知道变量。如果对此属性的访问受到限制(例如@private
),则它不应再出现在公共标题中,您应该使用第二个或第四个选项。
第二个是在类继续中声明的,这意味着只有实现才需要它。
第三个是全局变量,只有在特殊情况下才应该使用。
缺少其他选项
@implementation MyClass {
NSString *thirdString;
}
@end
(最新Apple编译器允许)与2相同,无需创建类继续。