を提出します。この実装クラスまたはインスタンスレベルは静的ですか?ファイルの外側ではどのようにアクセスできますか?宣言する変数(.M)は
2
A
答えて
1
someIntVariable
は@interface
の外に定義されているため(これはここには含まれていません)、インスタンス変数ではありません。それはグローバルです。
そして、あなたはstatic
キーワードを省略するので、それは彼らがそれを自分のextern
参照を定義する必要があると思いますけれども、この変数は、他のコンパイル単位に技術的に利用可能であることを意味します
extern int someIntVariable;
をあなたが望んでいた場合それを防ぐために、すなわち、この特定のコンパイル単位に、これはプライベート作る、あなたはSomeClass.m
でsomeIntVariable
の元の宣言でstatic
キーワードが含まれると思います。
static int someIntVariable;
このグローバル変数は@implementation
の外部に定義しました。しかし、それが@implementation
の内部にあったとしても、上記が当てはまることに注意する価値があります。
@implementation SomeClass
int someIntVariable;
- (void) foo {
someIntVariable = 0;
}
@end
ボトムラインあなたは、静的たい場合、:それは@implementation
の中にあった場合には(他のコンパイル単位はあなたの知識がなくても操作することができることを、グローバル変数ではなく、インスタンス変数)あなたの例とまったく同じ挙動を示します外部コンパイル単位では操作できないことを確認したければ、上記のようにstatic
と宣言します。インスタンス変数が必要な場合は、@interface
で明示的に宣言します(インスタンス変数を明示的に宣言するか、より一般的にはプロパティを宣言し、コンパイラにivarを合成させる)。
関連する問題
- 1. 再宣言はJavaScript変数
- 2. C++変数宣言
- 3. c#変数宣言
- 4. 宣言SQL変数 -
- 5. mの静的宣言は非静的宣言に従います
- 6. 変数を複数回宣言する
- 7. Objective-Cのグローバル変数 - .mファイル宣言のexternとtopの違い
- 8. jQueryの変数宣言
- 9. Javascript変数宣言問題
- 10. アセット宣言の変数
- 11. 変数宣言の問題
- 12. if節の変数宣言
- 13. ココア変数の宣言
- 14. スイッチヘッドの変数宣言?
- 15. スウィフト変数宣言トラブル
- 16. C++メソッド変数宣言
- 17. ローカル変数宣言迅速
- 18. teradataの変数の宣言
- 19. 宣言変数(ANSI C)
- 20. MYSQL宣言した変数
- 21. 不明な変数宣言
- 22. 変数宣言と代入
- 23. Truffleコンソール変数の宣言
- 24. @ sign in C変数宣言
- 25. SQL Server PROCEDURE変数宣言
- 26. 宣言変数をプログラム
- 27. グローバル変数宣言問題
- 28. Java変数の宣言
- 29. 変数宣言の問題
- 30. ヘッダーファイルの変数宣言
もちろんOPがプライベートインスタンス変数を必要とする場合は、次のようにすることができます: '@implementation {int someInVariable}'。 – rmaddy
うん、それも動作します。私は一般に私的なインスタンス変数をprivateクラスの拡張の '@ interface 'の中に定義していますが、' @ implementation'の中括弧の中にそれを含めています。 – Rob