iOS關鍵字static extern const使用示例詳解
全局變量
在函數(shù)外聲明的變量,可以在聲明時附上初始值,存儲在全局區(qū),生命周期為整個程序運行期間。
#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
SEString2static - 靜態(tài)全局變量
用static修飾的全局變量為靜態(tài)全局變量,存儲在全局區(qū),生命周期為整個程序運行期間。
#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
@endstatic不能與extern組合使用,否則報錯:Cannot combine with previous 'extern' declaration specifier
聲明在.h文件時,引入該類,依然可以使用并修改此靜態(tài)全局變量;
聲明在.m文件時,兩個類文件可是使用相同變量名,彼此相互獨立。
全局變量和靜態(tài)變量區(qū)別(摘抄)
兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯誤。
const
const修飾的變量是不可變的。
正確用法:
static NSString * const SEString = @"SEString";
以下兩種寫法const修飾的是* SEString,*是指針指向符,也就是說此時指向內(nèi)存地址是不可變的,而內(nèi)存保存的內(nèi)容時可變的。
static NSString const * SEString = @"SEString"; static const NSString * SEString = @"SEString";
局部變量
函數(shù)內(nèi)部聲明的變量,僅在當前函數(shù)執(zhí)行期間存在。
@implementation SEObject
- (void)add {
NSInteger a = 1;
NSInteger b = 2;
NSInteger c = a+b;
NSLog(@"c = %ld",c);
}
@end
static - 靜態(tài)局部變量
用static修飾的局部變量為靜態(tài)局部變量,存儲在全局區(qū),生命周期為整個程序運行期間。
- (void)add {
NSInteger a = 1;
NSInteger b = 2;
static NSInteger c2;
c2 += a+b;
NSLog(@"c2 = %ld",c2);
}
調(diào)用兩次結(jié)果:
c2 = 3
c2 = 6以上就是iOS關鍵字static extern const使用示例詳解的詳細內(nèi)容,更多關于iOS關鍵字static extern const的資料請關注腳本之家其它相關文章!
相關文章
Objective-C中block循環(huán)引用問題詳解
這篇文章主要給大家介紹了關于Objective-C中block循環(huán)引用問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Objective-C具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
實例解析iOS應用多線程開發(fā)中NSthread類的用法
這篇文章主要介紹了iOS應用多線程開發(fā)中NSthread類的用法,代碼基于傳統(tǒng)的Objective-C,NSthread類需要的朋友可以參考下2016-02-02

