一、 static 内部全局
作用域:
- 若在方法外:作用域为整个类,以及该文件中这个类下方的类中。
#import "MyObject.h"
@interface MyObject()
@end
@implementation MyObject
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"%@",stri); /// 会报错,不能访问
}
return self;
}
@end
static NSString * stri = @"hello";
@interface MyObject1:NSObject
@end
@implementation MyObject1
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"%@",stri); /// 正常,能访问到
}
return self;
}
@end
@interface MyObject2:NSObject
@end
@implementation MyObject2
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"%@",stri); /// 正常,能访问到
}
return self;
}
@end
- 若在方法内:作用域为这个方法。
#import "MyObject.h"
@interface MyObject()
@end
@implementation MyObject
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"%@",stri);/// 会报错,不能访问
}
return self;
}
@end
@interface MyObject1:NSObject
@end
@implementation MyObject1
- (instancetype)init
{
static NSString * stri = @"hello";
self = [super init];
if (self) {
NSLog(@"%@",stri);/// 正常,能访问到
}
return self;
}
- (void)test {
NSLog(@"%@",stri);/// 会报错,不能访问
}
@end
@interface MyObject2:NSObject
@end
@implementation MyObject2
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"%@",stri);/// 会报错,不能访问
}
return self;
}
@end
二、 extern 把某文件中的内部变量作用域,扩大至当前所包含作用域
- 一个文件中的全局变量是不能直接被其他文件访问的,如果想要访问某个文件的全局变量,可以通过extern var 来进行实现
比如有个类为MyObject1 里面定义了一个 name 的变量;
@implementation MyObject1
NSString * name = @"peng";
- (instancetype)init
{
self = [super init];
if (self) {
}
return self;
}
- (void)test {
}
@end
现在我们想在 MyObject 里面进行访问 MyObject1 中的 name 变量,此时是访问不到的;
但可以通过extern 进行实现访问:
extern NSString * name;
@interface MyObject()
@end
@implementation MyObject
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"%@",name);
}
return self;
}
@end
控制台此时就能通过MyObject打印出 MyObject1 中的name : peng;
也可以把
extern NSString * name;
写在MyObject1的.h
文件中
三、 const 常量
- 内存地址唯一、不可修改
- 需在声明时初始化
网友评论