iOS OC 成員變數是強引用還是弱引用

2021-07-11 15:23:59 字數 1646 閱讀 4393

成員變數,本例中的是例項成員變數,是作用於整個類物件內的。從生命週期來看,它比區域性變數要長一些,但它預設是私有的,其他物件是無法訪問到的。

比如你乙個變數放在

@inte***ce

中,你申請乙個實體時,變數存活週期跟你實體一樣。

因為成員變數的作用域是整個類物件內,所以在arc環境下oc裡面的成員變數應該是 strong屬性的。

例子:標頭檔案:

@inte***ce

viewcontroller : uiviewcontroller

//屬性變數

@property

(nonatomic

,strong

)nsarray

*array2

;@end

原始檔:

- (void)viewdidload

nslog(@"\narray1 : %@\n array2 : %@",array1,array2);

}

我的理解是

區域性變數是根據其生存週期定義的,在原始檔中的array1,其生命週期是在以「」為界限的**塊中,雖然它的名稱與成員變數相同,但不是同乙個變數。成員變數是用於乙個區域內的臨時變數。

成員變數,本例中的是例項成員變數,是作用於整個類物件內的。從生命週期來看,它比區域性變數要長一些,但它預設是私有的,其他物件是無法訪問到的。因此,一般自定義方法,作為乙個介面讓其他物件訪問這個變數。因此,成員變數用於類內部,無需與外界接觸的變數。

根據成員變數的私有性,為了方便訪問,所以就有了屬性變數。屬性變數的好處就是允許讓其他物件訪問到該變數。當然,你可以設定唯讀或者可寫等,設定方法也可自定義。所以,屬性變數是用於與其他物件互動的變數。

目前我是這麼理解的,希望對你有幫助。

成員變數和屬性變數是完全一樣的,別被obj-c 2.0的靈活寫法給誤導了。

但是屬性變數可以作為方法名字,也就是可以有其他名字。

看到一篇文章:

ios中的成員變數定義在@inte***ce 和@implementation 中的區別是什麼? 

@inte***ce 中是成員變數

@implementation 是全域性變數

作用域和存活區間的問題

比如你乙個變數放在

@inte***ce

中,你申請乙個實體時,變數存活週期跟你實體一樣

在@implementation 中,因為是全域性,所以一直存在

非常感謝!

作用域,就是這個變數在存活區域,

比如說成員變數,就是放在@inte***ce,作用域是類裡面

全域性變數,是整個程式

臨時變數一般是函式內

@implementation testclass

這樣的變數應該不是全域性的吧? 

@implementation testclass 

這個情況比較少個,不推薦,這個情況是成員變數

但是預設是@private

其實都是成員變數,放在

@implemetation裡的是私有的而已。

都是成員變數,只是放在

@implemetation中的變數無法被子類繼承

Java是值傳遞還是引用傳遞?

廢話不多說,上 很簡單,圖一中呼叫靜態方法intvalues int t 毫無疑問是傳遞值,因為如果是引用傳遞,那麼二者列印的值是一致的。很明顯,a 之後,t的值沒有發生改變。圖二也是一樣,清晰明了,把方法引數的值賦值給a,然後改變a的值,二者值列印均一致,那是因為t代表的是乙個堆記憶體的位址,基本...

Java是值傳遞還是引用傳遞

基本型別 如上圖所示,基本型別傳遞時,執行緒在棧上分配形式引數並拷貝實際引數的值。create with intellij idea author wangzhenpeng date 2018 4 8 time 上午9 48 e mail wangzhenpeng0924 163.com descr...

String是值傳遞還是引用傳遞

今天發現了乙個比較有意思的問題。把乙個string型別的引數傳入方法,並在方法內改變了引用的值。然後他在方法外使用這個值,發現這個string還是之前的值,並沒有改變。這裡要向大家介紹一下,大家都知道j a在傳參時分為值傳遞和引用傳遞。引數為基本型別時是值傳遞,引數為封裝型別時是引用傳遞。例如 pu...