跳到主要內容

[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?

    回覆刪除

張貼留言

這個網誌中的熱門文章

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

隱私權政策-台股評價分析

非常歡迎您使用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絕不會提供、交換、出租或出售任何您的個人資料給其他個人、團體、私人企業或公務機關,但有法律依據或合約義務者,不在此限。 前項但書之情形包括不限於: 經由您書面同意。 法律明文規定。 為免除您生命、身體、自由或財產上之危險。 與公務機關或學術研究機構合作,基於公共利益為統...