声明变量的方式之间的区别

时间:2013-02-17 14:51:29

标签: objective-c

我是Objective-C的新手,我无法理解MyClass.h中变量声明(firstString,secondString和thirdString)之间的区别是什么:

@interface MyClass {
    NSString *firstString;
}
@end
MyClass.m中的

@interface MyClass() {
    NSString *secondString;
}
@end

@implementation MyClass

NSString *thirdString;

@end

我想第一种和第二种情况是一样的,但在什么情况下最好使用?

非常感谢!

3 个答案:

答案 0 :(得分:3)

firstString在标头中声明,该文件由其他类#import编辑。它暴露给其他类,因此可以通过子类访问,并且由于符号在头文件中可用,外部对象通过key-value coding更改会更简单。

secondString在您的实现文件中声明。 ()中的@interface MyClass ()表示这是class extensionsecondString不会暴露给外部类(但是,与Objective-C中的所有内容一样,您不能认为它是真正的私有类。)

答案 1 :(得分:2)

第一个和第二个变量将是实例变量,而第三个变量将是文件范围的全局变量。通常,您应该使用实例变量并避免使用全局变量。

答案 2 :(得分:1)

三者之间没有功能差异,主要是能见度控制。

  1. 第一个是在你的类的公共头文件中声明的,这意味着你希望程序员知道变量。如果对此属性的访问受到限制(例如@private),则它不应再出现在公共标题中,您应该使用第二个或第四个选项。

  2. 第二个是在类继续中声明的,这意味着只有实现才需要它。

  3. 第三个是全局变量,只有在特殊情况下才应该使用。

  4. 缺少其他选项

  5. @implementation MyClass {
        NSString *thirdString; 
    }
    
    @end
    

    (最新Apple编译器允许)与2相同,无需创建类继续。