extern可以用来作为全局变量的声明,如果 ClassA 中定义了一个全局变量a,要在 ClassB 中使用这个全局变量就需要在 ClassB 中声明一个变量a,并用extern修饰。示例代码如下。
ClassA.h
#import <Foundation/Foundation.h>
@interface ClassA : NSObject {
}
- (void)setA:(int)x;
- (void)show;
@end
ClassA.m
#import "ClassA.h"
@implementation ClassA
int a = 1;
- (void)setA:(int)x {
a = x;
}
- (void)show {
NSLog(@"ClassA a:%d", a);
}
@end
ClassB.h
#import <Foundation/Foundation.h>
#import "ClassA.h"
@interface ClassB : NSObject
- (void)show;
@end
ClassB.m
#import "ClassB.h"
@implementation ClassB
extern int a;
- (void)show {
NSLog(@"ClassB a:%d",a);
}
@end
main.m
#import <Foundation/Foundation.h>
#import "ClassB.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
ClassA *a = [ClassA new];
ClassB *b = [ClassB new];
[a show];
[b show];
[a setA:2];
[a show];
[b show];
ClassA *a2 = [ClassA new];
[a2 show];
}
return 0;
}
运行结果
2013-07-01 18:28:23.663 ExternTest[4646:303] ClassA a:1
2013-07-01 18:28:23.667 ExternTest[4646:303] ClassB a:1
2013-07-01 18:28:23.668 ExternTest[4646:303] ClassA a:2
2013-07-01 18:28:23.669 ExternTest[4646:303] ClassB a:2
2013-07-01 18:28:23.670 ExternTest[4646:303] ClassA a:2
本demo下载地址