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 構文であるためです。2 番目の形式はインスタンス変数を定義せず、グローバルを定義します。グローバルを定義したい場合は、@interfaceブロックの前に定義して、クラス定義の一部に見えないようにします。

中括弧の外側は、メソッドとプロパティの宣言の場所です。

しかし、プライベート ivar は、.h ファイルではなく、.m ファイルで宣言する必要があります。

@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 に答える