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
源程序中不能存在相同的對象名,否則編譯器報(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
SEString2static - 靜態(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
@endstatic不能與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的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了IOS-MVC層讀取服務(wù)器接口JSON數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
iOS中的UIKeyboard鍵盤視圖使用方法小結(jié)
鍵盤視圖我們平時(shí)在做App的時(shí)候都要調(diào)用得到,這里我們就來整理一下iOS中的UIKeyboard鍵盤視圖使用方法小結(jié),需要的朋友可以參考下2016-06-06
iOS使用WKWebView加載HTML5不顯示屏幕寬度的問題解決
這篇文章主要介紹了iOS使用WKWebView加載HTML5不顯示屏幕寬度的問題解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
iOS實(shí)現(xiàn)去除html標(biāo)簽的方法匯總
相信大家在做網(wǎng)站的時(shí)候,經(jīng)常會(huì)遇到去除html標(biāo)簽的問題,下面這篇文章主要給大家總結(jié)介紹了關(guān)于iOS如何實(shí)現(xiàn)去除html標(biāo)簽的一些方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10
iOS開發(fā)驗(yàn)證判斷語句之正則表達(dá)式小結(jié)
最近在公司接手重構(gòu)一個(gè)項(xiàng)目,發(fā)現(xiàn)之前的開發(fā)在驗(yàn)證格式這塊寫的太亂了,到處都有相關(guān)的驗(yàn)證代碼,所以就有了這篇文章,供自己收藏也分享給有需要的朋友們參考借鑒,下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2016-12-12
詳解iOS App中UiTabBarController組件的基本用法
UiTabBarController組件即是用來創(chuàng)建App中的Tab視圖切換選項(xiàng)欄,下面將詳解iOS App中UiTabBarController組件的基本用法,包括左右滑動(dòng)切換標(biāo)簽頁等基本功能的實(shí)現(xiàn),需要的朋友可以參考下2016-05-05

