最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IOS中(assign,retain,copy,weak,strong)的區(qū)別以及nonatomic的含義

 更新時間:2017年03月08日 14:49:20   投稿:lqh  
這篇文章主要介紹了我們在聲明@property 屬性時,總是要在括號中寫上assign、retain、copy、weak、strong中的一個,他們的區(qū)別,需要的朋友可以參考下

IOS中(assign,retain,copy,weak,strong)的區(qū)別以及nonatomic的含義

我們在聲明@property 屬性時,總是要在括號中寫上assign、retain、copy、weak、strong中的一個,很多時候,我們僅僅只是按照習(xí)慣去寫經(jīng)常寫的那一個,但有時候看代碼時又會發(fā)現(xiàn)別人用的不盡相同,那這些之間的區(qū)別是什么呢?

首先,上面五個并不是在一個層面上的,可以分為兩部分,第一部分是assign、retain、copy,第二部分是weak、strong。

我們先說第一部分的assign、retain、copy。

assign:

assign一般用來修飾基本的數(shù)據(jù)類型,包括基礎(chǔ)數(shù)據(jù)類型 (NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float, double, char, 等等),為什么呢?assign聲明的屬性是不會增加引用計數(shù)的,也就是說聲明的屬性釋放后,就沒有了,即使其他對象用到了它,也無法留住它,只會crash。但是,即使被釋放,指針卻還在,成為了野指針,如果新的對象被分配到了這個內(nèi)存地址上,又會crash,所以一般只用來聲明基本的數(shù)據(jù)類型,因為它們會被分配到棧上,而棧會由系統(tǒng)自動處理,不會造成野指針。

retain:

與assign相對,我們要解決對象被其他對象引用后釋放造成的問題,就要用retain來聲明。retain聲明后的對象會更改引用計數(shù),那么每次被引用,引用計數(shù)都會+1,釋放后就會-1,即使這個對象本身釋放了,只要還有對象在引用它,就會持有,不會造成什么問題,只有當(dāng)引用計數(shù)為0時,就被dealloc析構(gòu)函數(shù)回收內(nèi)存了。

copy:

最常見到copy聲明的應(yīng)該是NSString。copy與retain的區(qū)別在于retain的引用是拷貝指針地址,而copy是拷貝對象本身,也就是說retain是淺復(fù)制,copy是深復(fù)制,如果是淺復(fù)制,當(dāng)修改對象值時,都會被修改,而深復(fù)制不會。之所以在NSString這類有可變類型的對象上使用,是因為它們有可能和對應(yīng)的可變類型如NSMutableString之間進(jìn)行賦值操作,為了防止內(nèi)容被改變,使用copy去深復(fù)制一份。copy工作由copy方法執(zhí)行,此屬性只對那些實現(xiàn)了NSCopying協(xié)議的對象類型有效 。

以上三個可以在MRC中使用,但是weak和strong就只能在ARC中使用,也就是自動引用計數(shù),這時就不能手動去進(jìn)行retain、release等操作了,ARC會幫我們完成這些工作。

weak:

weak其實類似于assign,叫弱引用,也是不增加引用計數(shù)。一般只有在防止循環(huán)引用時使用,比如父類引用了子類,子類又去引用父類。IBOutlet、Delegate一般用的就是weak,這是因為它們會在類外部被調(diào)用,防止循環(huán)引用。

strong:

相對的,strong就類似與retain了,叫強(qiáng)引用,會增加引用計數(shù),類內(nèi)部使用的屬性一般都是strong修飾的,現(xiàn)在ARC已經(jīng)基本替代了MRC,所以我們最常見的就是strong了。

nonatomic:

在修飾屬性時,我們往往還會加一個nonatomic,這又是什么呢?它的名字叫非原子訪問。對應(yīng)的有atomic,是原子性的訪問。我們知道,在使用多線程時為了避免在寫操作時同時進(jìn)行寫導(dǎo)致問題,經(jīng)常會對要寫的對象進(jìn)行加鎖,也就是同一時刻只允許一個線程去操作它。如果一個屬性是由atomic修飾的,那么系統(tǒng)就會進(jìn)行線程保護(hù),防止多個寫操作同時進(jìn)行。這有好處,但也有壞處,那就是消耗系統(tǒng)資源,所以對于iPhone這種小型設(shè)備,如果不是進(jìn)行多線程的寫操作,就可以使用nonatomic,取消線程保護(hù),提高性能。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Xcode9項目上傳到GitHub教程

    Xcode9項目上傳到GitHub教程

    本篇文章給大家分享一下在IOS中如何將Xcode9項目上傳到GitHub的教程方法,一起跟著學(xué)習(xí)分享下吧。
    2018-01-01
  • iOS屏幕適配開發(fā)實用技巧

    iOS屏幕適配開發(fā)實用技巧

    這篇文章主要為大家詳細(xì)介紹了iOS屏幕適配開發(fā)實用技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 關(guān)于iOS獲取屬性你真的了解嗎?

    關(guān)于iOS獲取屬性你真的了解嗎?

    這篇文章主要給大家介紹了關(guān)于iOS取屬性的相關(guān)資料,當(dāng)說到取屬性,相信很多的iOS開發(fā)者們會說出很多,但你就真的理解嗎?下面就來詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • iOS實現(xiàn)播放遠(yuǎn)程網(wǎng)絡(luò)音樂的核心技術(shù)點總結(jié)

    iOS實現(xiàn)播放遠(yuǎn)程網(wǎng)絡(luò)音樂的核心技術(shù)點總結(jié)

    本篇文章主要介紹了iOS播放遠(yuǎn)程網(wǎng)絡(luò)音樂的核心技術(shù),采用ios系統(tǒng)自帶的AVFoundation框架來實現(xiàn),有需要的朋友可以了解一下。
    2016-11-11
  • iOS利用Block逆向傳值的方式詳解

    iOS利用Block逆向傳值的方式詳解

    大家應(yīng)該都有所了解在iOS開發(fā)中,常見的幾種逆向傳值方式,有代理(delegate)、通知(NSNotification),block等等,之前已經(jīng)給大家介紹了通過代理實現(xiàn)逆向傳值的方法,這篇文章來給大家介紹如何通過Block進(jìn)行逆向傳值,有需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • iOS中tableView cell分割線的一些設(shè)置技巧

    iOS中tableView cell分割線的一些設(shè)置技巧

    在項目開發(fā)中我們會常常遇到tableView 的cell分割線顯示不全,左邊會空出一截像素,更有甚者想改變系統(tǒng)的分割線,下面通過這篇文章來一起學(xué)習(xí)學(xué)習(xí)在iOS中tableView cell分割線的一些設(shè)置技巧,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • iOS實現(xiàn)圓角箭頭視圖

    iOS實現(xiàn)圓角箭頭視圖

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)圓角箭頭視圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • OpenCV??iOS?圖像處理編程入門詳細(xì)教程

    OpenCV??iOS?圖像處理編程入門詳細(xì)教程

    這篇文章主要介紹了OpenCV?iOS?圖像處理編程入門,OpenCV?的應(yīng)用領(lǐng)域非常廣泛,包括圖像拼接、圖像降噪、產(chǎn)品質(zhì)檢、人機(jī)交互、人臉識別、動作識別、動作跟蹤、無人駕駛等,對于圖像處理、人機(jī)交互及機(jī)器學(xué)習(xí)算法感興趣的可以選擇一個方向進(jìn)行深入的研究
    2022-07-07
  • iOS DropDown下拉按鈕效果代碼分享

    iOS DropDown下拉按鈕效果代碼分享

    這篇文章主要為大家詳細(xì)介紹了iOS DropDown下拉按鈕效果的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 基于ios逆向過程中l(wèi)ldb調(diào)試技巧(推薦)

    基于ios逆向過程中l(wèi)ldb調(diào)試技巧(推薦)

    下面小編就為大家?guī)硪黄趇os逆向過程中l(wèi)ldb調(diào)試技巧(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

滦平县| 茂名市| 安达市| 哈巴河县| 临夏县| 山丹县| 湘潭县| 玛沁县| 奉新县| 五指山市| 汤原县| 明溪县| 利川市| 梅州市| 马尔康县| 西藏| 靖宇县| 泗阳县| 太湖县| 庐江县| 吴江市| 阿拉善盟| 林甸县| 容城县| 马龙县| 安多县| 普宁市| 左权县| 马山县| 阿拉善右旗| 祁连县| 阳城县| 龙山县| 富蕴县| 锦屏县| 墨脱县| 石首市| 华坪县| 绍兴市| 湟中县| 棋牌|