關於OC的property 和 例項變數思考

2021-06-18 09:41:33 字數 999 閱讀 2649

區別一

property的是可以被外部訪問的,當然也可以定義私有的property,

但是例項變數,外部是不可訪問的。所以當我們的變數需要給外部訪問的時候,可以定義property。

區別二我們需要儲存我們的資料,不要被提前dealloc的時候,可以使用property的setter,來retain多一次,等到使用完了再release,更好控制,使用例項變數的話,就只是乙個指標,不會呼叫setter方法,容易被改變。

區別三如果在操作中,我們僅僅是需要用到乙個變數的位址,那麼用例項變數就好,用self.property的話,雖然只是呼叫getter來的到指標,但是也繞多了一步,去呼叫getter才拿到指標。補充

1》@property並不只是可以生成getter和setter方法,它還可以做記憶體管理。不過這裡我暫不討論、、也就是說

2》atomic是預設行為,assign是預設行為,readwrite是預設行為。

3》推薦做法是nsstring用copy,delegate用assign(且一定要用assign,不要問為什麼,只管去用就是了,以後你會明白的),非objc資料型別,比如int,float等基本資料型別用assign(預設就是assign),而其它objc型別,比如nsarray,nsdate用retain。

4》dealloc函式裡面有這樣的**:self.*** = nil;看到這裡,現在你們明白這樣寫有什麼用了吧?它等價於[*** release];  *** = [nil retain];(---如果你的property(nonatomic,retian)***,那麼就會這樣,如果不是,就對號入座吧)

因為nil可以給它傳送任何訊息,而不會出錯。為什麼release掉了還要賦值為nil呢?大家用c的時候,都有這樣的編碼習慣吧。

int* arr = new int[10];    然後不用的時候,delete arr; arr = null;  在objc裡面可以用一句話self.arr = nil;搞定

使用analyze可以分析**有潛在記憶體洩露,可以根據需要進行修改。 原文

OC中 property的所有屬性

1,assign 簡單賦值,不更改索引計數 假設你用malloc分配了一塊記憶體,並且把它的位址賦值給了指標a,後來你希望指標b也共享這塊記憶體,於是你又把a賦值給 assign 了b。此時a 和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使...

十 oc中 property引數的學習

windows phone 7手機開發 ios培訓 期待與您交流!在前面寫的部落格中也寫到過 property,但是那時候寫的是最簡單的一種形式,也就是說當我們給乙個非oc物件設計setter與getter方法,例如給基本資料型別int double enum struct設定setter與gett...

OC中 property的所有屬性詳解

1,assign 簡單賦值,不更改索引計數 假設你用malloc分配了一塊記憶體,並且把它的位址賦值給了指標a,後來你希望指標b也共享這塊記憶體,於是你又把a賦值給 assign 了b。此時a 和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使...