このヘッダに見てください:Objective-Cでの静的変数宣言の違いは何ですか?
// Test.h
@interface Test : NSObject @end
extern id A; // (0)
//extern static id B; // (1) Uncomment to get a compiling error
extern id C; // (2)
//extern static id D; // (3) Uncomment to get a compiling error
そして、この実装へ:
// Test.m
#import "Test.h"
id A = @"A"; // (4)
static id B = @"B"; // (5)
@implementation Test
id C = @"C"; // (6)
static id D = @"D"; // (7)
@end
// Still Test.m
@interface Test2 : NSObject @end
@implementation Test2 : NSObject
+ (void)initialize {
NSLog(@"%@ %@", A, B); // (8)
NSLog(@"%@ %@", C, D); // (9)
}
@end
私は、次の質問がある:
- は宣言(4)との間の根本的な違いがありますし、 (5)または(6)および(7)のいずれかに記載の方法。
- 「外部」宣言(4)と実装スコープ(6)に囲まれた宣言には違いがありますか?
- 実装スコープ内で宣言された理由(6)と(7)は、別の実装スコープ(9)でアクセスできますか?
- ヘッダーで宣言された理由(2)が実装スコープ内で宣言された(6)アクセスできる
- エラーが発生する理由
Cannot combine with previous 'extern' declaration specifier
(0)と(2)はエラーなしでコンパイルされますか?
あなたは岩です。ありがとう! – Stream