iOS開發 小白高階 什麼是ARC 二

2021-06-28 02:56:26 字數 2389 閱讀 1083

@property (nonatomic, strong) nsstring ****array;

在ios程式中我們常常會看到上述的字樣那麼這究竟是什麼意思呢?這也就是我們所說的屬性。 屬性

readewrite:指明屬性是read/write 預設屬性是readwrite。在沒有arc以前需要@sythesize指令。這樣getter,setter方法才會被生成。在arc以後我們不需要去使用@sythesize編譯器會自動我們生成getter,setter方法。在下文會詳細說明。

readonly:指明屬性是唯讀的。只有getter方法被生成。假如使用self.xx來給唯讀屬性賦值。那麼編譯器將會報錯。

以上的屬性屬於可寫性,是否與乙個setter方法關聯。

assign: 不複製不保留,直接賦值。

retain: 保留了賦值時傳遞的物件。在進行新的賦值之前釋放了以前的值。

copy:傳送一條複製的訊息給被傳遞的物件保留它,並釋放任何以前的值。

以上的三個屬性屬於setter語法

nonatomic:非原子性,不加同步,在多執行緒中會提高效能。

以上時原子性。

詳細用法

@property (引數1, 引數2)  型別   變數名

引數1與引數2就是上面所提到的屬性:可寫性,setter方法,原子性。

可寫性跟原子性沒有什麼要說的我們主要來看看setter方法中copy跟rentain。

retain的setter方法

-(void) ste*** :(class*** *) obj

}

copy的setter方法
-(void) set***: (class*** *) obj

}

retain: 保留了賦值時傳遞的物件。在進行新的賦值之前釋放了以前的值。

copy:傳送一條複製的訊息給被傳遞的物件保留它,並釋放任何以前的值。

那這倆句話究竟是什麼意思?看一段**

mytestobject * temp = [[mytestobject alloic] init];

self.obj = temp;//retaincount = 2

[temp release]; //reataincount = 1;

_obj = [[mytestobject alloc] init]; //retaincount = 1

為什麼會出現這種情況,實際上self.obj 條用的是setter方法來實現賦值的,而setter的屬性正是retain。而_obj只是指標簡單的賦值沒有呼叫setter方法。簡單的來說就是說retain我們可以理解為是指標的拷貝。retain是建立乙個新指標,引用計數加一。它與原物件的位址相同的當然內容也是相同的。也就是c++中的深拷貝。

既然存在了深拷貝,那麼當然也存在淺拷貝。而copy也就是我們所說的淺拷貝,也就是內容的拷貝。copy是建立乙個新物件,與原物件內容相同,與引用計數無關。舊的物件也沒有變化。

如果沒有理解上述的說法那麼我們就記住:

當用基本資料型別的時候例如:int,double等  我們就把屬性設定為assign

當用nsstring時把屬性設定為copy

剩下的我們就把屬性設定為strong(strong可以理解為retain的加強版)

屬性的好處

屬性宣告為訪問器方法提供了清晰,現實的配置。(訪問器也就是getter,setter方法個人理解)

編譯器可以按照你在宣告中的配置為你合成訪問器方法。

屬性語法標示符,加上作用於限制,因此,編譯器可以檢測到未宣告的屬性的使用

@synthesize mytestobject;

在沒有arc以前我們常常會看到**中有上述的字樣那麼這究竟是幹什麼的?

@inte***ce mytestobject : nsobjecrt

@property (nonatomic, assign) int ntest;

@end

@implrmentation mytestobject

@synthesize ntest;

@end

這段**的意思就是要讓ntest可以使用舊必須要用@synthesize提供乙個跟屬性名字相的及型別相同的例項變數來使用它。

但是rac出現以後我們大可以不比這麼麻煩。我們只需要這樣

@inte***ce mytestobject :nsobject

@property (nonatomic, assign) int ntest;

@end

編譯器會自動生成getter,setter方法而arc的誕生,不僅省去了我門呼叫@synthesize例項化,而且還省去了人工release提高了記憶體管理的效率。

iOS應用開發 什麼是ARC?

arc是什麼 arc基本規則 總結 新年伊始,永珍更新。新一年開始,我們來更加深入了解一下iphone開發的內部。作為開始,我們先來了解一下arc。arc是什麼 arc是ios 5推出的新功能,全稱叫 arc automatic reference counting 簡單地說,就是 中自動加入了re...

iOS應用開發 什麼是ARC?

arc是什麼 arc是ios 5推出的新功能,全稱叫 arc automatic reference counting 簡單地說,就是 中自動加入了retain release,原先需要手動新增的用來處理記憶體管理的引用計數的 可以自動地由編譯器完成了。該機能在 ios 5 mac os x 10....

iOS應用開發 ARC

arc是什麼 arc是ios 5推出的新功能,全稱叫 arc automatic reference counting 簡單地說,就是 中自動加入了retain release,原先需要手動新增的用來處理記憶體管理的引用計數的 可以自動地由編譯器完成了。該機能在 ios 5 mac os x 10....