跳到主要內容

[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

Mac上無蝦米的終級方案!

之前是用香草輸入法,是可以打出無蝦啦,只是有些字尾會多出一個空白,很是討厭 今天突然發現一個不錯的輸入法居然可以很正常的打出無蝦米,真是超感動的啦 一開始是看到這個網頁,是介紹『鼠鬚管 (Squirrel)』這個輸入法的 https://blog.yorkxin.org/posts/2013/12/10/use-boshiamy-in-squirrel/ 但他需要一個官方的iBus表格檔,我沒有…我有買android及iOS的說...   然後,在下面的的連結找到了 http://monkey413.blogspot.tw/2014/04/fcitx-rime.html 輸入法官網  http://rime.im/ 安裝完輸入法後,將網友提供的檔放入到『用戶設定』指到的位置   然後打開default.yaml 在schema_list選項中,加入 - schema: liur 重新部署(不確定是否一定要)   內部的選項不知怎麼按出來?… ==>操作說明  https://github.com/rime/home/wiki/UserGuide

[PS4 VR] 影片轉檔

怎麼用索尼PSVR看安卓VR 360° 3D視頻 => 將雙眼視頻改成單眼視頻,將格式改成MPEG-4,解析度1920*1080 ,60幀 15000kbps https://kknews.cc/tech/vme9a5l.html ============================================================== Wondershare Filmora:  8.0.0 for Mac 破解版下載 http://www.iphoneba.net/2563.html v8.2.0 http://www.zhinin.com/wondershare_filmora-mac.html ============================================================== for Littlstar http://docs.littlstar.com/plugins/servlet/mobile?contentId=2262863#content/view/2262863 Video Requirements H.264 High@5.1 or lower Max pixel width: 2560 Max frame rate: 60fps (最好是29.97) YUV420/NV12 color space 20Mbps bit rate or lower Audio Requirements Stereo Audio only AAC (Advanced Audio Coding) 320Kbps bit rate or lower Container Requirements File extensions: MP4, MOV No fragmented MP4 No DRM 15 min max duration 以上~ Littlstar不支援平面的3D格式,只支援180或360 而PSVR的媒體播放器不支援3D,只支援360 ============================================================== Make 3D Videos For PSVR Wat