<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • iOS中各種修飾符有什么區(qū)別-創(chuàng)新互聯(lián)

            這篇文章給大家介紹iOS中各種修飾符有什么區(qū)別,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

            公司專注于為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、微信公眾號開發(fā)、商城網(wǎng)站制作小程序設(shè)計(jì),軟件按需設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)建站更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。

            atomic

            設(shè)置成員變量的@property屬性時(shí),默認(rèn)為atomic,提供多線程安全。

            在多線程環(huán)境下,原子操作是必要的,否則有可能引起錯(cuò)誤的結(jié)果。加了atomic,setter函數(shù)會變成下面這樣:

            {lock}
            if (property != newValue) { 
            [property release]; 
            property = [newValue retain]; 
            }
            {unlock}

            nonatomic

            禁止多線程,變量保護(hù),提高性能。

            atomic是Objc使用的一種線程保護(hù)技術(shù),基本上來講,是防止在寫未完成的時(shí)候被另外一個(gè)線程讀取,造成數(shù)據(jù)錯(cuò)誤。而這種機(jī)制是耗費(fèi)系統(tǒng)資源的,所以在iPhone這種小型設(shè)備上,如果沒有使用多線程間的通訊編程,那么nonatomic是一個(gè)非常好的選擇。

            assign

            對基礎(chǔ)數(shù)據(jù)類型 (NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float, double, char)等等。

            此標(biāo)記說明設(shè)置器直接進(jìn)行賦值,這也是默認(rèn)值。在使用垃圾收集的應(yīng)用程序中,如果你要一個(gè)屬性使用assign,且這個(gè)類符合NSCopying協(xié) 議,你就要明確指出這個(gè)標(biāo)記,而不是簡單地使用默認(rèn)值,否則的話,你將得到一個(gè)編譯警告。這再次向編譯器說明你確實(shí)需要賦值,即使它是 可拷貝的。

            retain

            對其他NSObject和其子類對參數(shù)進(jìn)行release舊值,再retain新值

            指定retain會在賦值時(shí)喚醒傳入值的retain消息。此屬性只能用于Objective-C對象類型,而不能用于Core Foundation對象。(原因很明顯,retain會增加對象的引用計(jì)數(shù),而基本數(shù)據(jù)類型或者Core Foundation對象都沒有引用計(jì)數(shù)——譯者注)。
            注意: 把對象添加到數(shù)組中時(shí),引用計(jì)數(shù)將增加對象的引用次數(shù)+1。

            copy

            對NSString 它指出,在賦值時(shí)使用傳入值的一份拷貝??截惞ぷ饔蒫opy方法執(zhí)行,此屬性只對那些實(shí)行了NSCopying協(xié)議的對象類型有效。

            copy與retain區(qū)別:

            Copy其實(shí)是建立了一個(gè)相同的對象,而retain不是:

            1.比如一個(gè)NSString 對象,地址為0×1111 ,內(nèi)容為@”STR”,Copy 到另外一個(gè)NSString 之后,地址為0×2222 ,內(nèi)容相同。

            2.新的對象retain為1 ,舊有對象沒有變化retain 到另外一個(gè)NSString 之后,地址相同(建立一個(gè)指針,指針拷貝),內(nèi)容當(dāng)然相同,這個(gè)對象的retain值+1。

            總結(jié):retain 是指針拷貝,copy 是內(nèi)容拷貝。

            assign與retain:

            1. 接觸過C,那么假設(shè)你用malloc分配了一塊內(nèi)存,并且把它的地址賦值給了指針a,后來你希望指針b也共享這塊內(nèi)存,于是你又把a(bǔ)賦值給(assign)了b。此時(shí)a和b指向同一塊內(nèi)存,請問當(dāng)a不再需要這塊內(nèi)存,能否直接釋放它?答案是否定的,因?yàn)閍并不知道b是否還在使用這塊內(nèi)存,如果a釋放了,那么b在使用這塊內(nèi)存的時(shí)候會引起程序crash掉。

            2. 了解到1中assign的問題,那么如何解決?最簡單的一個(gè)方法就是使用引用計(jì)數(shù)(reference counting),還是上面的那個(gè)例子,我們給那塊內(nèi)存設(shè)一個(gè)引用計(jì)數(shù),當(dāng)內(nèi)存被分配并且賦值給a時(shí),引用計(jì)數(shù)是1。當(dāng)把a(bǔ)賦值給b時(shí)引用計(jì)數(shù)增加到2。這時(shí)如果a不再使用這塊內(nèi)存,它只
            需要把引用計(jì)數(shù)減1,表明自己不再擁有這塊內(nèi)存。b不再使用這塊內(nèi)存時(shí)也把引用計(jì)數(shù)減1。當(dāng)引用計(jì)數(shù)變?yōu)?的時(shí)候,代表該內(nèi)存不再被任何指針?biāo)?,系統(tǒng)可以把它直接釋放掉。

            const

            變量修飾符,只有只讀權(quán)限,意思是這個(gè)參數(shù)只能讀,不能修改內(nèi)容,誰近修飾誰。

            用途: 1.便于測試快速找到問題

            2如果是大型算法可以快速找到是哪個(gè)模塊出現(xiàn)錯(cuò)誤

            修飾位置:

            iOS中各種修飾符有什么區(qū)別

            register

            //register int b = 0;

            變量前面加register修飾,編譯器會優(yōu)先將此變量放在寄存器中,這樣對這個(gè)變量進(jìn)行的各種操作及運(yùn)算,會很快,(適用于嵌入式編程)當(dāng)然CPU周邊的用戶可用空閑寄存器是有限的,所以當(dāng)定義多個(gè)register修飾的變量后,當(dāng)可用寄存器已被占完,后面的變量即便用register修飾,也是不起作用的,依然是在普通內(nèi)存中為變量開辟空間。

            static

            有時(shí)候我們非常希望,用一個(gè)小變量記錄某函數(shù)調(diào)用的次數(shù),解決這個(gè)問題

            方法1、可以使用全局變量;但是由于所有函數(shù)都可以修改它,對于較大程序出了問題不好調(diào),所以使用全局變量并不好。

            方法2、可以在目標(biāo)函數(shù)中定義一個(gè)static變量(測試會發(fā)現(xiàn)這個(gè)變量的地址已經(jīng)不再棧區(qū),而是在數(shù)據(jù)區(qū)),每次進(jìn)入函數(shù)讓其++,static作用在局部變量前,函數(shù)結(jié)束此變量的值不清空,即改變了此變量的生命期,而且直到整個(gè)程序結(jié)束,并且此變量的值只有在定義它的函數(shù)中才可以被使用和重新賦值

            extern

            extern int n;

            extern可以擴(kuò)展全局變量或函數(shù)的作用范圍,只有全局變量或函數(shù)才可以用extern擴(kuò)展

            extern與register的區(qū)別

            extern可以用來擴(kuò)展函數(shù)的作用范圍,可以跨文件擴(kuò)展,前提是被擴(kuò)展全局變量或者函數(shù)在定義時(shí)沒有被static修飾!

            簡單來說,assign 修飾符用來修飾值類型和 id 類型(一般是 delegate)的屬性,需要注意的是如果 id 類型的屬性的修飾符用了 assign, 當(dāng)你不再需要這個(gè)屬性時(shí),你必須將 delegate 手動(dòng)置空,防止野指針產(chǎn)生,這也是為什么 delegate 一般都用 weak 修飾的原因。

            weak 和 strong 是 ARC 的產(chǎn)物,分別表示弱引用類型和強(qiáng)引用類型。在給 strong 修飾的屬性賦值時(shí),會將屬性的指針指向新值的地址,同時(shí)持有這個(gè)新值(新值的引用計(jì)數(shù)被加1)。在給 weak 修飾的屬性賦值時(shí),只是簡單地將屬性的指針指向新值的地址,不會持有新值。

            retain 在 ARC 下基本等同于 strong。

            copy 表示強(qiáng)引用,但是不會持有新值,而是拷貝一份引用計(jì)數(shù)為1的值給屬性。給這種修飾符修飾的屬性賦值時(shí),實(shí)際上是把 新值調(diào)用 copy 方法后的返回值 賦給屬性。NSString 類型常常用 copy 修飾,就是防止修改某個(gè)對象后,對強(qiáng)引用這個(gè)對象的屬性造成不必要影響。

            引用類型默認(rèn)的修飾符是 strong.

            值類型的默認(rèn)修飾符是 assign.

            關(guān)于iOS中各種修飾符有什么區(qū)別就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

            另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.jbt999.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

            分享標(biāo)題:iOS中各種修飾符有什么區(qū)別-創(chuàng)新互聯(lián)
            文章位置:http://www.jbt999.com/article34/djjhse.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、App開發(fā)虛擬主機(jī)、標(biāo)簽優(yōu)化、定制網(wǎng)站、網(wǎng)站內(nèi)鏈

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

            成都app開發(fā)公司

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 特级aV毛片在线 | A片免费网站 | 午夜级青就 | 国产亚洲精品久久久久丝瓜 | 在线视频内射 |