3 屬性與例項變數

2021-07-09 19:11:46 字數 1722 閱讀 5474

資料成員

*注意,可以用屬性訪問的情況下,盡量不要直接訪問例項變數,否則引用可能會有記憶體管理問題出現。

初始化和析構器以及自定義訪問器方法中才直接訪問例項變數。因為這引用型別有記憶體管理附加方法,但是這三個方法的生存週期比較特殊,因此不會出現問題。

// @property 型別 [類型別需要'*'號,值型別不需要] 屬性名稱;

@property

nsstring * name;

@property

int age;

// 可以自定義訪問器方法

@property (getter=givename, setter=setname) nsstring * name;

/* oc中並不支援類屬性。

但是可以可以通過c語言方法模擬乙個類屬性。 */

static

int _max = 100;

+(int)max

+(void)setmax:(int)newvalue

// 可以直接定義例項物件,但是就只有類內可以訪問了。

例項變數

例項變數一般都是私有的,但是可以通過@public讓他公有化,但是,很少見。

@inte***ce shape : nsobject  

// 訪問時,以類似c語言的風格進行

atomic屬性可以確保在多執行緒情況下,不會同時有多個執行緒對屬性進行操作。

weak:

arc機制之下。通過自動引用計數來決定物件是否可以被釋放。

如果兩個物件之間相互引用,在該物件從棧上釋放之後,由於在堆中任然有指標指向他們,所以他們的自動引用計數會一直大於0,因此無法被釋放。

因此需要對這種情況下的物件使用(weak)描述特性,使用了weak之後,該指標不會增加自動引用計數,因此可以阻止迴圈引用。

copy:

正常情況下,物件之間的賦值其實是對指標的拷貝,因此賦值之後,賦值物件與被賦值物件其實是指向同乙個堆的位置,當其中之一進行資料操作之後,其他物件也會被影響。

而加了copy之後,再進行賦值的時候,會對賦值物件進行深拷貝並傳遞拷貝出來的新內容給被賦值物件。這種情況下,會在堆中新建新的內容,因此不會相互影響。

屬性,例項變數和成員變數

synthesize window window 意思是說,window 屬性為 window 例項變數合成訪問器方法。解析 意思是說window屬性生成訪問方法 setwindow方法,而這個方法就是實際變數 window的 的訪問方法,setwindow操作的就是 window這個方法。ps w...

python3之類屬性與例項屬性

類屬性就相當與全域性變數,例項物件共有的屬性,例項物件的屬性為例項物件自己私有。類屬性就是類物件 tool 所擁有的屬性,它被所有類物件的例項物件 例項方法 所共有,在記憶體中只存在乙個副本,這個和c 中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件和例項物件訪問。class pe...

類屬性與例項屬性

給例項繫結屬性的方法是通過例項變數,或者通過self變數 class student object def init self,name self.name name s student bob s.score 90但是,如果student類本身需要繫結乙個屬性呢?可以直接在class中定義屬性,這...