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í)如果其它源文件想要訪問(wèn)該全局變量,需要聲明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,*是指針指向符,也就是說(shuō)此時(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開(kāi)發(fā),感興趣的朋友可以了解下2020-10-10
Objective-C中block循環(huán)引用問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于Objective-C中block循環(huán)引用問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Objective-C具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
實(shí)例解析iOS應(yīng)用多線程開(kāi)發(fā)中NSthread類的用法
這篇文章主要介紹了iOS應(yīng)用多線程開(kāi)發(fā)中NSthread類的用法,代碼基于傳統(tǒng)的Objective-C,NSthread類需要的朋友可以參考下2016-02-02
iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例
下面小編就為大家分享一篇iOS 獲取當(dāng)前時(shí)間及時(shí)間戳的互換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
iOS 圖片上傳使用base64或者二進(jìn)制流上傳頭像功能
這篇文章主要介紹了iOS 圖片上傳使用base64或者二進(jìn)制流上傳頭像功能,需要的朋友可以參考下2017-09-09
iOS開(kāi)發(fā)之銀行卡號(hào)識(shí)別
本文給大家分享ios開(kāi)發(fā)之銀行卡號(hào)識(shí)別功能,思路明確,需要的朋友參考下吧2016-12-12
深入了解iOS開(kāi)發(fā)中UIWindow的相關(guān)使用
這篇文章主要介紹了深入了解iOS開(kāi)發(fā)中UIWindow的相關(guān)使用,以及iOS8以后產(chǎn)生的相關(guān)變化,需要的朋友可以參考下2015-10-10

