iOS關(guān)鍵字static extern const使用示例詳解
全局變量
在函數(shù)外聲明的變量,可以在聲明時(shí)附上初始值,存儲(chǔ)在全局區(qū),生命周期為整個(gè)程序運(yùn)行期間。
#import "SEObject.h" //定義在.h文件中時(shí)該類被其他文件引入時(shí)報(bào)重復(fù)定義的錯(cuò)誤(1 duplicate symbol for architecture x86_64) NSString * SEString = @"SEString"; @implementation SEObject @end
#import "SEView.h" //#import "SEObject.h" //NSString * SEString; @implementation SEView @end
源程序中不能存在相同的對(duì)象名,否則編譯器報(bào)錯(cuò)(1 duplicate symbol for architecture x86_64
)
extern
此時(shí)如果其它源文件想要訪問該全局變量,需要聲明extern
。
- 在使用的類中
extern 全局變量
,此時(shí)不要要引入全局變量所在類。
#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 - 靜態(tài)全局變量
用static修飾的全局變量為靜態(tài)全局變量,存儲(chǔ)在全局區(qū),生命周期為整個(gè)程序運(yùn)行期間。
#import "SEObject.h" //定義在.h文件中時(shí)該類被其他文件引入時(shí)報(bào)重復(fù)定義的錯(cuò)誤(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
組合使用,否則報(bào)錯(cuò):Cannot combine with previous 'extern' declaration specifier
聲明在.h文件時(shí),引入該類,依然可以使用并修改此靜態(tài)全局變量;
聲明在.m文件時(shí),兩個(gè)類文件可是使用相同變量名,彼此相互獨(dú)立。
全局變量和靜態(tài)變量區(qū)別(摘抄)
兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。
const
const
修飾的變量是不可變的。
正確用法:
static NSString * const SEString = @"SEString";
以下兩種寫法const
修飾的是* SEString
,*
是指針指向符,也就是說此時(shí)指向內(nèi)存地址是不可變的
,而內(nèi)存保存的內(nèi)容時(shí)可變的
。
static NSString const * SEString = @"SEString"; static const NSString * SEString = @"SEString";
局部變量
函數(shù)內(nèi)部聲明的變量,僅在當(dāng)前函數(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)局部變量,存儲(chǔ)在全局區(qū),生命周期為整個(gè)程序運(yùn)行期間。
- (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關(guān)鍵字static extern const使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于iOS關(guān)鍵字static extern const的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例
這篇文章主要介紹了iOS WKWebview 白屏檢測(cè)實(shí)現(xiàn)的示例,幫助大家更好的進(jìn)行ios開發(fā),感興趣的朋友可以了解下2020-10-10Objective-C中block循環(huán)引用問題詳解
這篇文章主要給大家介紹了關(guān)于Objective-C中block循環(huán)引用問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Objective-C具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06實(shí)例解析iOS應(yīng)用多線程開發(fā)中NSthread類的用法
這篇文章主要介紹了iOS應(yīng)用多線程開發(fā)中NSthread類的用法,代碼基于傳統(tǒng)的Objective-C,NSthread類需要的朋友可以參考下2016-02-02iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例
下面小編就為大家分享一篇iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01iOS 圖片上傳使用base64或者二進(jìn)制流上傳頭像功能
這篇文章主要介紹了iOS 圖片上傳使用base64或者二進(jìn)制流上傳頭像功能,需要的朋友可以參考下2017-09-09深入了解iOS開發(fā)中UIWindow的相關(guān)使用
這篇文章主要介紹了深入了解iOS開發(fā)中UIWindow的相關(guān)使用,以及iOS8以后產(chǎn)生的相關(guān)變化,需要的朋友可以參考下2015-10-10