objective c感悟 三 屬性之謎

2021-07-10 12:23:15 字數 1885 閱讀 9331

@property (readwrite, assign, setter=setcity:, getter=getcity)nsstring *city;

@property (copy)nsstring *name;

@property (retain)arc *arc;

上面**是oc的屬性以及一些屬性修飾符,oc跟c++區別這裡挺大的,它提供了好多的操作的封裝,乙個@property在c++裡要碼幾行**了,但是也挺高了知識複雜度,需要仔細研究下。

@property是屬性指示符,我們可以像下面一下宣告屬性arc,預設屬性修飾符是assign與readwrite。而屬性city跟name我們省略了例項變數的宣告,@property可以幫我們自動生成。

@inte***ce property : nsobject

//@property nsstring *name;

@property (readwrite, assign, setter=setcity:, getter=getcity)nsstring *city;

@property (copy)nsstring *name;

@property (retain)arc *arc;

在實現裡用@synthesize是合成屬性的setter與getter方法。

@synthesize name;

@synthesize city;

@synthesize arc;

我們在c++裡一般像下面一樣建立setter與getter方法,在oc裡面只需要寫@property m_name與@synthesize m_name就可以了。

class cc

void setname(const char *name)

};

預設@property 的修飾是readwrite與assign,readwrite表示可讀寫,會幫我們生成這兩個方法,如果只要生成getter,可以設定@property(readonly) m_name,表示唯讀。copy跟retain兩個修飾用於指標的,基本型別跟結構不需要去設定。我們知道在c++中下面兩個操作,乙個是賦值操作,乙個是拷貝構造,c++裡分的很清楚,因為我們可以對物件解引用,然後賦值。而oc是擴充套件c的也可以解引用,但是不能對類物件賦值,那是c++類中定義的賦值操作,編譯器幫我們合成的,我們也可以手動定義。

cc *person1 = new cc;

cc *person2 = new cc;

*person1 = *person2; //assigment

cc person3 = *person2; //copy

oc裡我們拷貝乙個物件到另乙個物件,其實就是把乙個物件copy下,然後賦值給另乙個物件指標,而不是重寫另乙個物件記憶體資料,就想下面一樣

arc * a = [[arc alloc] init];

arc * b = [[arc alloc] init];

a = [b copy];

那麼oc裡我們怎麼把乙個物件賦值給另乙個物件,而不是賦值物件指標呢。我們發現了有copy跟assign兩個屬性修飾符,後者是預設的,就是指標直接傳值,而不是傳的指標所指物件。copy就是用來解決我們上面問題的,會把物件記憶體拷乙份副本過來覆蓋原來記憶體資料。對於那些我們想要拷貝的屬性,比如nsstring型別的,a不想跟b發生聯絡,不想被b的改變而改變的,就用copy,如果唯一,單例就用assign,這是預設的,我們無需手動指定

最後說下retain,它會讓屬性的應該計數加一,關閉arc測試發現不管getter,還是setter都會導致計數加一,而nsstring計數是-1。

Objective C 屬性詳解

屬性作用 自動生成setter和getter方法 屬性定義 property 屬性的型別 型別與內部操作的例項變數的型別相同 屬性名 和內部操作例項變數名相同 屬性在.h檔案中,自動生成的是setter和getter方法的宣告 屬性特性,1.讀寫特性 1 可讀可寫 讀,getter方法 寫,sett...

Objective C屬性property詳解

1.1 property的語法格式 property 引數1,引數2 型別名字 這裡的引數,主要有以下三種 setter getter方法 assign retain copy 讀寫屬性 readwrite readonly atomicity nonatomic 1.2 三種方式的使用 assig...

Objective C 原子屬性

objective c 在宣告乙個屬性的時候,想必大家都是不用經過大腦思考就會寫 property nonatomic,我們都知道屬性可以是 nonatomic 也可以使 atomic 的,但是好像幾乎所有屬性在宣告的時候 nonatomic,atomic 的屬性幾乎沒出現過。atomic 修飾符彷...