iOS关键字static extern const使用示例详解
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
全局变量
在函数外声明的变量,可以在声明时附上初始值,存储在全局区,生命周期为整个程序运行期间。
#import "SEObject.h" //定义在.h文件中时该类被其他文件引入时报重复定义的错误(1 duplicate symbol for architecture x86_64) NSString * SEString = @"SEString"; @implementation SEObject @end
#import "SEView.h" //#import "SEObject.h" //NSString * SEString; @implementation SEView @end
源程序中不能存在相同的对象名,否则编译器报错(1 duplicate symbol for architecture x86_64
)
extern
此时如果其它源文件想要访问该全局变量,需要声明extern
。
- 在使用的类中
extern 全局变量
,此时不要要引入全局变量所在类。
#import "SEView.h" //#import "SEObject.h" //NSString * SEString; @implementation SEView - (void)add { extern NSString * SEString; NSLog(@"%@",SEString); SEString = @"SEString2"; NSLog(@"%@",SEString); } @end
- 在全局变量所在类的
.h文件
中声明该全局变量外部使用(推荐)。
#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN extern NSString * SEString; @interface SEObject : NSObject @end NS_ASSUME_NONNULL_END
#import "SEView.h" #import "SEObject.h" //NSString * SEString; @implementation SEView - (void)add { //extern NSString * SEString; NSLog(@"%@",SEString); SEString = @"SEString2"; NSLog(@"%@",SEString); } @end SEString SEString2
static - 静态全局变量
用static修饰的全局变量为静态全局变量,存储在全局区,生命周期为整个程序运行期间。
#import "SEObject.h" //定义在.h文件中时该类被其他文件引入时报重复定义的错误(1 duplicate symbol for architecture x86_64) static NSString * SEString = @"SEString"; @implementation SEObject + (void)add { NSLog(@"%@",SEString); SEString = @"SEString2"; NSLog(@"%@",SEString); } SEString SEString2 @end
static
不能与extern
组合使用,否则报错:Cannot combine with previous 'extern' declaration specifier
声明在.h文件时,引入该类,依然可以使用并修改此静态全局变量;
声明在.m文件时,两个类文件可是使用相同变量名,彼此相互独立。
全局变量和静态变量区别(摘抄)
两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
const
const
修饰的变量是不可变的。
正确用法:
static NSString * const SEString = @"SEString";
以下两种写法const
修饰的是* SEString
,*
是指针指向符,也就是说此时指向内存地址是不可变的
,而内存保存的内容时可变的
。
static NSString const * SEString = @"SEString"; static const NSString * SEString = @"SEString";
局部变量
函数内部声明的变量,仅在当前函数执行期间存在。
@implementation SEObject - (void)add { NSInteger a = 1; NSInteger b = 2; NSInteger c = a+b; NSLog(@"c = %ld",c); } @end
static - 静态局部变量
用static修饰的局部变量为静态局部变量,存储在全局区,生命周期为整个程序运行期间。
- (void)add { NSInteger a = 1; NSInteger b = 2; static NSInteger c2; c2 += a+b; NSLog(@"c2 = %ld",c2); } 调用两次结果: c2 = 3 c2 = 6
以上就是iOS关键字static extern const使用示例详解的详细内容,更多关于iOS关键字static extern const的资料请关注程序员之家其它相关文章!
相关文章
searchDisplayController 引起的数组越界处理办法
这篇文章主要介绍了searchDisplayController 引起的数组越界处理办法,需要的朋友可以参考下2015-07-07IOS 中NSUserDefaults读取和写入自定义对象的实现方法
这篇文章主要介绍了IOS 中NSUserDefaults读取和写入自定义对象的实现方法的相关资料,希望通过本文大家能够理解掌握这部分内容,需要的朋友可以参考下2017-09-09IOS NSNotification 键盘遮挡问题的解决办法
这篇文章主要介绍了IOS NSNotification 键盘遮挡问题的解决办法的相关资料,希望通过本文能帮助到大家,解决这样的问题,需要的朋友可以参考下2017-09-09
最新评论