在@interface的括号内外声明的变量

时间:2013-02-25 19:05:50

标签: objective-c scope global-variables instance-variables variable-declaration

为什么必须在@interface括号内声明变量?

@interface myClass : UIViewController {
     NSString *myString;
     IBOutlet UILabel *myLabel;
}

为什么不在这里呢?

@interface myClass : UIViewController {
     IBOutlet UILabel *myLabel;
}

NSString *myString;

3 个答案:

答案 0 :(得分:5)

因为如果不这样做,那么变量将是一个文件范围变量(具有静态存储持续时间),并且它不是您类的实例变量

答案 1 :(得分:1)

因为第一种形式是用于声明实例变量的正确的Objective-C语法。第二种形式没有定义实例变量,它定义了一个全局变量。如果您希望定义全局,请在@interface块之前定义它,这样它似乎不是类定义的一部分。

大括号之外是方法和属性声明的地方。

但更好的是,私有ivars应该在.m文件中声明,而不是.h文件。

@implementation myClass {
    // private ivars here
}

我不认为这适用于IBOutlet。我认为他们需要在.h文件中。但我不使用IB,所以我不确定。

答案 2 :(得分:0)

我们应该这样做的方式就像吼叫:

@interface MyClass : UIViewController {

}

@property (strong, nonatomic) NSString *myString;

@property (weak, nonatomic) IBOutlet UILabel *myLabel;

@end

只需遵循惯例,不要让开发人员的生活复杂化;)