亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

iOS 各種修飾符的區(qū)別匯總(推薦)

 更新時間:2017年10月11日 17:30:50   作者:lin_transform  
這篇文章給大家介紹了iOS 各種修飾符的區(qū)別匯總,需要的朋友參考下吧

atomic

設置成員變量的@property屬性時,默認為atomic,提供多線程安全。

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

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

nonatomic

禁止多線程,變量保護,提高性能。

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

assign

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

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

retain

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

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

copy

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

copy與retain區(qū)別:

Copy其實是建立了一個相同的對象,而retain不是:

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

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

總結:retain 是指針拷貝,copy 是內容拷貝。

assign與retain:

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

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

const

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

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

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

修飾位置:

register

//register int b = 0;

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

static

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

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

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

extern

extern int n;

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

extern與register的區(qū)別

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

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

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

retain 在 ARC 下基本等同于 strong。

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

引用類型默認的修飾符是 strong.

值類型的默認修飾符是 assign.

相關文章

  • iOS開發(fā)之事件傳遞響應鏈

    iOS開發(fā)之事件傳遞響應鏈

    這篇文章主要為大家介紹了iOS開發(fā)之事件傳遞響應鏈,何為事件的響應鏈,本文為大家揭曉,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 實例講解iOS中的CATransition轉場動畫使用

    實例講解iOS中的CATransition轉場動畫使用

    CATransition類為應用程序的轉場動畫提供了很多可控制參數(shù),接下來我們就以幾個實例講解iOS中的CATransition轉場動畫使用,需要的朋友可以參考下
    2016-06-06
  • 詳解IOS四種保存數(shù)據(jù)的方式

    詳解IOS四種保存數(shù)據(jù)的方式

    本篇文章主要介紹了OS四種保存數(shù)據(jù)的方式,現(xiàn)在分享給大家,也給大家做個參考。感興趣的小伙伴們可以參考一下。
    2016-11-11
  • iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問題的解決

    iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問題的解決

    iOS10的到來,帶來了條幅和鎖屏界面的重新設計,美觀又好看,再加上抬腕喚醒功能,查看需要的信息確實更便捷了,還能快捷回復一些通知,十分輕松,但同樣有問題,下面這篇文章主要給大家介紹了關于iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問題的解決方法,需要的朋友可以參考下。
    2017-10-10
  • 詳解iOS開發(fā)中使用storyboard創(chuàng)建導航控制器的方法

    詳解iOS開發(fā)中使用storyboard創(chuàng)建導航控制器的方法

    這篇文章主要介紹了iOS開發(fā)中使用storyboard創(chuàng)建導航控制器的方法,包括對控制器聲明周期的控制介紹,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-01-01
  • IOS中UIWebView加載Loading的實現(xiàn)方法

    IOS中UIWebView加載Loading的實現(xiàn)方法

    最近有朋友問我類似微信語音播放的喇叭動畫和界面圖片加載loading界面是怎樣實現(xiàn)的,是不是就是一個gif圖片呢!我的回答當然是否定了,當然不排除也有人用gif圖片??!
    2015-05-05
  • iOS runtime知識梳理

    iOS runtime知識梳理

    本文主要對iOS runtime的知識進行梳理。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • IOS開發(fā)代碼分享之獲取啟動畫面圖片的string

    IOS開發(fā)代碼分享之獲取啟動畫面圖片的string

    本文是IOS開發(fā)代碼分享系列的第一篇文章,這里分享下獲取啟動畫面圖片的string的代碼,本代碼支持 iPhone 6 以下. 支持 iPhone 及 iPad,非常實用,希望對大家有所幫助
    2014-09-09
  • iOS點擊文字按鈕變轉圈加載效果

    iOS點擊文字按鈕變轉圈加載效果

    這篇文章主要為大家詳細介紹了iOS點擊文字按鈕變轉圈加載效果的相關資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • iOS去除Webview鍵盤頂部工具欄的方法

    iOS去除Webview鍵盤頂部工具欄的方法

    這篇文章主要給大家介紹了關于iOS去除Webview鍵盤頂部工具欄的相關資料,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06

最新評論