跳到主要內容

[iOS] attribute of properties

1. assign :

簡單賦值,不更改索引計數

假設你用malloc分配了一塊記憶體,並且把它的位址賦值給了指標a,後來你希望指標b也共用這塊記憶體,於是你又把a賦值給(assign)了b。此時a 和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使用這塊記憶體,如果a釋放了,那麼b在使用這塊記憶體的時候會引起程式crash掉

 

應用場合:

對基礎資料類型 (例如NSInteger,CGFloat)和C資料類型(int, float, double, char, 等)

適用單一資料型別

 

2. retain:

與strong相對應,使用了引用計數,retain+1,release -1;當引用 計數為0時,dealloc會被調用,記憶體被釋放

 

3. copy:

用於非共用記憶體時,每個指標有自己的記憶體空間

 

4. atomic://預設屬性

A. 當一個變數聲明為atomic時,意味著在多執行緒中只能有一個執行緒能對它進行訪問

B. 當一個變數聲明為atomic時,該變數為執行緒安全型,但是會影響存取速度

C. 當一個變數聲明為atomic時,在非ARC編譯環境下,需要設置訪問鎖來保證對該變數進行正確的get/set

 

5. nonatomic:

A. 當一個變數聲明為nonatomic時,意味著多個執行緒可以同時對其進行訪問

B. 當一個變數聲明為nonatomic時,它是非執行緒安全型,存取速度快

C. 當一個變數聲明為nonatomic時,當兩個不同的執行緒對其訪問時,容易失控。

 

總結:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作。在多執行緒環境下,原子操作是必要的,否則有可能引起錯誤的結果。加了atomic,setter函數會變成下面這樣:

 

if (property != newValue) {

[property release];

property = [newValue retain];

}

 

6. strong://ARC中預設屬性,等於非ARC中的retain

與retain相對應,

應用場景:

strong屬性用於ARC中

@property (strong,nonatomic) ViewController *viewController;

 

7. weak:

與assign 相對應,

應用場景:

用於IBOutlets,如,UIViewController的子類,即一般的控制項。

@property (weak, nonatomic) IBOutlet UIButton *myButton;

 

strong與weak的區別舉例:

前提:

我們把要用strong或者weak的物件比作一隻風箏,風箏想掙脫線的束縛,自由飛翔去,如果此時有一根線,那麼這只風箏就掙脫不了

過程分析

strong屬性的變數:

當我們把指向一隻風箏的變數聲明為strong時,此時,你就擁有控制這只風箏的線,假如此時有三個人同時控制這只風箏(即這只風箏物件有三個strong類型的變數指向它),那麼只有一種情況,這只風箏才會掙脫掉線的束縛:這三個人都放掉手中的線,(release掉)

weak屬性的變數:

當我們把指向一隻風箏的變數聲明為weak時,此時,就像站在旁邊看風箏的觀眾們一樣,當上面的三個人還握著手中的線時,他們只能看到風箏,並不能控制它,他們能做的只能是用手指指向風箏,並大喊,「看,那只風箏飛得真高!」,然而,當上面的三個人把手中的線都放掉時,此時,風箏飛走了,看不見了,不管有再多的觀眾,他們再也看不到風箏了,這個故事告訴我們一個道理:當strong類型的指標被釋放掉之後,所有的指向同一個物件的weak指標都會被清零。

weak: 物件是否被清除與該指標無關!

下面有詳細範例

iOS5 ARC学习笔记:strong、weak等详解 http://mobile.51cto.com/iphone-386301.htm

 

8. readonly

只有get方法,沒有set方法

 

9. readwrite//預設屬性

有get/set方法

 

10. unsafe_unretauined

用在ARC編譯環境下,在此環境下,與assign相似。它只是告訴ARC如何正確地調用聲明為unsafe_unretauined變數的retain和release

 

 

留言

  1. Are you looking to make money from your websites or blogs with popunder ads?
    If so, have you tried using Clicksor?

    回覆刪除

張貼留言

這個網誌中的熱門文章

隱私權政策-台股營收分析

非常歡迎您使用APP「台股營收分析」(以下簡稱APP),為了讓您能夠安心的使用APP的各項服務與資訊,特此向您說明APP的隱私權保護政策,以保障您的權益,請您詳閱下列內容: 一、隱私權保護政策的適用範圍 隱私權保護政策內容,包括APP如何處理在您使用APP服務時收集到的個人識別資料。隱私權保護政策不適用於APP以外的相關連結APP,也不適用於非APP所委託或參與管理的人員。 二、個人資料的蒐集、處理及利用方式 當您造訪APP或使用APP所提供之功能服務時,我們將視該服務功能性質,請您提供必要的個人資料,並在該特定目的範圍內處理及利用您的個人資料;非經您書面同意,APP不會將個人資料用於其他用途。 APP在您使用服務信箱、問卷調查等互動性功能時,會保留您所提供的姓名、電子郵件地址、聯絡方式及使用時間等。 於一般瀏覽時,伺服器會自行記錄相關行徑,包括您使用連線設備的IP位址、使用時間、使用的瀏覽器、瀏覽及點選資料記錄等,做為我們增進APP服務的參考依據,此記錄為內部應用,決不對外公佈。 為提供精確的服務,我們會將收集的問卷調查內容進行統計與分析,分析結果之統計數據或說明文字呈現,除供內部研究外,我們會視需要公佈統計數據及說明文字,但不涉及特定個人之資料。 三、資料之保護 APP主機均設有防火牆、防毒系統等相關的各項資訊安全設備及必要的安全防護措施,加以保護APP及您的個人資料採用嚴格的保護措施,只由經過授權的人員才能接觸您的個人資料,相關處理人員皆簽有保密合約,如有違反保密義務者,將會受到相關的法律處分。 如因業務需要有必要委託其他單位提供服務時,APP亦會嚴格要求其遵守保密義務,並且採取必要檢查程序以確定其將確實遵守。 四、APP對外的相關連結 APP的網頁提供其他APP的網路連結,您也可經由APP所提供的連結,點選進入其他APP。但該連結APP不適用APP的隱私權保護政策,您必須參考該連結APP中的隱私權保護政策。 五、與第三人共用個人資料之政策 APP絕不會提供、交換、出租或出售任何您的個人資料給其他個人、團體、私人企業或公務機關,但有法律依據或合約義務者,不在此限。 前項但書之情形包括不限於: 經由您書面同意。 法律明文規定。 為免除您生命、身體、自由或財產上之危險。 與公務機關或學術研究機構合作,基於公...

小米路由器 mini 刷機

這次會來刷機是因為要給 MOD 使用 但原本的 小米路由器 mini 沒支援 IPTV 不想再買一台路由器(已經有四台了XD,有3台是被淘汰的)   參考文章︰ 1.  ERIC的攝影世界 - 小米路由器mini 免USB打開SSH  ( 備份檔案 ) 2.  ERIC的攝影世界 - 小米路由器mini韌體刷openwrt PandoraBox韌體  ( 備份檔案 ) 3.  寫寫東西 分享心得 - 小米路由器mini 改韌體 可看中華電信MOD iptv功能開啟 刷機 刷rom 直通MOD 老毛子Padavan固件 華碩 RT-AC54U  ( 備份檔案 )   其實找了很多篇文章,大部份都教用官方的那招,但不知道為什麼我就是取不到SSH的密碼 https://d.miwifi.com/rom/ssh  這個一直導不到要的那頁… 所以後來是用了  ERIC的攝影世界 - 小米路由器mini 免USB打開SSH  的第二招  免USB打開SSH 步驟︰ 1. 手動更新韌體到小米路由器mini 穩定版 2.8.14 ( 備用檔案 ) 2. 然後按  ERIC的攝影世界 - 小米路由器mini 免USB打開SSH  的 1.2.3.4.5   2.1 登入  小米路由器mini控制台  後複制網址     http://192.168.31.1/cgi-bin/luci/;stok=521b849e00a11c5b6743aa275ba84ed8 /web/home#router   2.2 將下面的網址紅色部份換成自己的,然後再貼到Browser上     http://192.168.31.1/cgi-bin/luci/;stok=521b849e00a11c5b6743aa275ba84ed8 /api/xqsystem/set_name_password?oldPwd=路由器控制台管理密碼&newPwd=admin     順利的會得到  {"code":0}   2.3 將下面的網址紅色部份換成自己的,然後再貼到Browser上     http://192.168.31.1/cgi-bin/luci/;stok=521b849e00a11c5b6743aa275ba84ed8 /api/x...

小光頭快長大APP

小光頭快長大APP 新手父母總是手忙腳亂 當寶寶哭鬧時,總是要猜寶寶是想睡覺、還是肚子餓了 還要回想寶寶上一餐是幾點吃的,吃了多少… 本APP協助新手爸媽 1. 記錄寶寶每一餐的時間,及奶量 2. 設定鬧鐘,定時提醒爸媽您的寶寶應該是肚子餓了