2

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

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

为什么不在这里做呢?

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

NSString *myString;
4

3 回答 3

6

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

于 2013-02-25T19:08:44.473 回答
1

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

花括号外面是方法和属性声明的地方。

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

@implementation myClass {
    // private ivars here
}

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

于 2013-02-25T19:08:36.883 回答
0

我们应该这样做的方式如下:

@interface MyClass : UIViewController {

}

@property (strong, nonatomic) NSString *myString;

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

@end

只需遵循约定,不要使开发人员的生活复杂化;)

于 2013-02-25T19:30:26.343 回答