iOS 局部變量 全局變量 成員變量

一.成員變量 : 寫在類聲明的大括號中的變量叫成員變量 (也叫屬性/實(shí)例變量)

成員變量不可離開類 離開了類就不是成員變量

成員變量不能再定義的同事初始化

成員量只能通過對象來訪問

成員變量存儲在堆中(當(dāng)前對象對應(yīng)的堆得存儲空間中) 不會被系統(tǒng)自動釋放 只能有程序員手動釋放

二.局部變量 :寫在代碼塊或函數(shù)中的變量為局部變量

局部變量的作用域 : 從定義的那一行開始,一直到遇到大括號或return(也就是這個變量所在的代碼塊或函數(shù)結(jié)束時)

局部變量可以先定義后初始化,也可以在定義的同時就初始化

局部變量存儲在棧里面 系統(tǒng)會自動釋放

三.全局變量 : 卸載函數(shù)外或大括號外的變量就是全局變量

全局變量的作用域 : 從定義哪行開始 到文件末尾

全局變量可以向定義再初始化,也可以定義的同時初始化

全局變量存儲在靜態(tài)區(qū)中 程序啟動時就會分配存儲空間 直到程序結(jié)束才會釋放

全局變量與全局靜態(tài)變量的區(qū)別:

(a)若程序由一個源文件構(gòu)成時,全局變量與全局靜態(tài)變量沒有區(qū)別。

(b)若程序由多個源文件構(gòu)成時,全局變量與全局靜態(tài)變量不同:全局靜態(tài)變量使得該變量成為定義該變量的源文件所獨(dú)享,即:全局靜態(tài)變量對組成該程序的其它源文件是無效的。

(c)具有外部鏈接的靜態(tài);可以在所有源文件里調(diào)用;除了本文件,其他文件可以通過extern的方式引用;

靜態(tài)全局變量的作用:

(a)不必?fù)?dān)心其它源文件使用相同變量名,彼此相互獨(dú)立。

(b)在某源文件中定義的靜態(tài)全局變量不能被其他源文件使用或修改。

(c) 只能在本文件中使用!具有內(nèi)部鏈接的靜態(tài);不允許在其他文件里調(diào)用;

接下來,Xcode創(chuàng)建一個工程,并且創(chuàng)建一個繼承于UIView的MyView(為了驗(yàn)證在兩個不同的 .m 文件中全局變量和靜態(tài)全局變量的使用):

1 兩個.m文件中同樣的全局

我的理解是:同一個工程中,兩個不同 .m 文件中同樣的全局變量不能同時存在,因?yàn)檫@樣在編譯或運(yùn)行的時候,編譯器分不清是哪個全局變量,所以我們千萬不能同時在同一個工程中定義同樣的全局變量!

2 一個.m文件使用另一個.m文件中的全局變量

問題來了,如果我就是想用另一個 .m 文件中的全局變量,那怎么處理呢?很簡單,使用關(guān)鍵字 extern 修飾使用的全局變量就好了,也即是在

import “ViewController.h”中:

//加上關(guān)鍵字extern,表示這里要使用到MyView中的全局變量

extern NSInteger CellHeight;

打印結(jié)果:0。因?yàn)楫?dāng)沒有初始化的時候系統(tǒng)默認(rèn):零。

注:如果在MyView中初始化了數(shù)據(jù),比如NSInteger CellHeight = 100;則打印結(jié)果就為100,但是在ViewController中就不能再次初始化?。。》駝t編譯報(bào)錯同上?。?!

3 靜態(tài)全局變量

顯然,依舊報(bào)錯!這是因?yàn)樵贛yView中是一個靜態(tài)全局變量,盡管在ViewController使用了關(guān)鍵字extern想使用它,但還是不行的,靜態(tài)全局變量只能在本文件中使用,不允許其他文件的調(diào)用!換句話說我們可以在兩個不同的 .m 文件中定義同樣的靜態(tài)全局變量,而互不干涉、互不影響。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容