iOS之各種區(qū)別

寫在前面:本文持續(xù)更新雳刺,也歡迎簡友提供更多的關(guān)于iOS(包括swift)中的區(qū)別

1. __ _block和 _ _ _weak修飾符的區(qū)別的:

(1). _ _block不管是ARC還是MRC模式下都可以使用萝喘,可以修飾對象笨奠,還可以修飾基本數(shù)據(jù)類型。 
(2). _ _weak只能在ARC模式下使用,也只能修飾對象(NSString),不能修飾基本數(shù)據(jù)類型(int)敏释。 
(3). _ _block對象可以在block中被重新賦值, _ _weak不可以摸袁。

注: 變量對象在block中是只讀的钥顽,前面用_ _block修飾是為了讓block是復(fù)制其引用地址來實(shí)現(xiàn)對外界變量的訪問。

2.assign和weak有什么區(qū)別

  一 但惶、區(qū)別

       (1).修飾變量類型的區(qū)別 weak只可以修飾對象耳鸯。如果修飾基本數(shù)據(jù)類型,編譯器會(huì)報(bào)錯(cuò)-“Property with ‘weak’ attribute must be of object type”膀曾。assign 可修飾對象县爬,和基本數(shù)據(jù)類型。當(dāng)需要修飾對象類型時(shí)添谊,MRC時(shí)代使用unsafe_unretained财喳。當(dāng)然,unsafe_unretained也可能產(chǎn)生野指針,所以它名字是"unsafe_”耳高。
       (2).是否產(chǎn)生野指針的區(qū)別 weak不會(huì)產(chǎn)生野指針問題扎瓶。因?yàn)閣eak修飾的對象釋放后(引用計(jì)數(shù)器值為0),指針會(huì)自動(dòng)被置nil泌枪,之后再向該對象發(fā)消息也不會(huì)崩潰概荷。 weak是安全的。assign 如果修飾對象碌燕,會(huì)產(chǎn)生野指針問題误证;如果修飾基本數(shù)據(jù)類型則是安全的。修飾的對象釋放后修壕,指針不會(huì)自動(dòng)被置空愈捅,此時(shí)向?qū)ο蟀l(fā)消息會(huì)崩潰。
  二慈鸠、相似
          都可以修飾對象類型蓝谨,但是assign修飾對象會(huì)存在問題
  三、總結(jié)
          assign 適用于基本數(shù)據(jù)類型如int,float,struct等值類型青团,不適用于引用類型譬巫。因?yàn)橹殿愋蜁?huì)被放入棧中,遵循先進(jìn)后出原則壶冒,由系統(tǒng)負(fù)責(zé)管理?xiàng)?nèi)存缕题。而引用類型會(huì)被放入堆中,需要我們自己手動(dòng)管理內(nèi)存或通過ARC管理胖腾。weak 適用于delegate和block等引用類型,不會(huì)導(dǎo)致野指針問題瘪松,也不會(huì)循環(huán)引用咸作,非常安全。當(dāng)然怎么選擇使用assign還是weak宵睦,MRC的話只能用assign记罚,在ARC的情況下最好使用weak,因?yàn)閣eak修飾的變量在釋放后自動(dòng)指向nil壳嚎,防止野指針存在桐智。

3. copy與retain(strong)的區(qū)別

謝謝簡友 追善的指出, 此條之前的說法的確不夠嚴(yán)謹(jǐn)烟馅,吾正在詳細(xì)創(chuàng)造中... 下面先放個(gè)圖

copy修飾的可變與不可變.png

4.assign和retain的區(qū)別

assign就是直接賦值说庭,從而可能引起1中的問題,當(dāng)數(shù)據(jù)為int, float等原生類型時(shí)郑趁,可以使用assign刊驴。retain就如2中所述,
使用了引用計(jì)數(shù),retain引起引用計(jì)數(shù)加1, release引起引用計(jì)數(shù)減1捆憎,當(dāng)引用計(jì)數(shù)為0時(shí)舅柜,dealloc函數(shù)被調(diào)用,內(nèi)存被回收躲惰。

5. extension和category的區(qū)別

extension看起來很像一個(gè)匿名的category致份,但是extension和有名字的category幾乎完全是兩個(gè)東西。 
extension在編譯期決議础拨,它就是類的一部分氮块,在編譯期和頭文件里的@interface以及實(shí)現(xiàn)文件里的@implement一起形成一個(gè)完整的類,它伴隨類的產(chǎn)生而產(chǎn)生太伊,亦隨之一起消亡雇锡。extension一般用來隱藏類的私有信息,你必須有一個(gè)類的源碼才能為一個(gè)類添加extension僚焦,所以你無法為系統(tǒng)的類比如NSString添加extension锰提。
但是category則完全不一樣,它是在運(yùn)行期決議的芳悲。就category和extension的區(qū)別來看立肘,我們可以推導(dǎo)出一個(gè)明顯的事實(shí),extension可以添加實(shí)例變量名扛,而category是無法添加實(shí)例變量的(因?yàn)樵谶\(yùn)行期谅年,對象的內(nèi)存布局已經(jīng)確定,如果添加實(shí)例變量就會(huì)破壞類的內(nèi)部布局肮韧,這對編譯型語言來說是災(zāi)難性的)融蹂。

6. const和宏(define)的區(qū)別

1.define在預(yù)處理階段進(jìn)行替換,const常量在編譯階段使用
2.define不做類型檢查弄企,僅僅進(jìn)行替換超燃,const常量有數(shù)據(jù)類型,會(huì)執(zhí)行類型檢查
3.define不能調(diào)試拘领,const常量可以調(diào)試
4.define定義的常量在替換后運(yùn)行過程中意乓,會(huì)不斷地占用內(nèi)存,而const定義的常量存儲(chǔ)在數(shù)據(jù)段约素,只有一份copy届良,效率更高。
5.define可以定義一些簡單的函數(shù)和方法圣猎,而const不能

7. id 和 instancetype 的區(qū)別

1.  instancetype 和 id 都是萬能指針士葫,指向?qū)ο蟆?
2.  不同點(diǎn): 
    id在編譯的時(shí)候不能判斷對象的真實(shí)類型,instancetype在編譯的時(shí)候可以判斷對象的真實(shí)類型 
    id可以用來定義變量样漆,可以作為返回值類型为障,可以作為形參類型;instancetype只能作為返回值類型  
3.  注意:以后凡是自定義構(gòu)造方法,返回值類型盡量使用instancetype鳍怨,不要使用id 

8.struct和class的區(qū)別

struct是值引用 深拷貝呻右,不可繼承,swift更加推薦使用struct鞋喇。
class是類引用 淺拷貝 可繼承

To be continued...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末声滥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子侦香,更是在濱河造成了極大的恐慌落塑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐韩,死亡現(xiàn)場離奇詭異憾赁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)散吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門龙考,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人矾睦,你說我怎么就攤上這事晦款。” “怎么了枚冗?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵缓溅,是天一觀的道長。 經(jīng)常有香客問我赁温,道長坛怪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任股囊,我火速辦了婚禮酝陈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毁涉。我一直安慰自己,他們只是感情好锈死,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布贫堰。 她就那樣靜靜地躺著,像睡著了一般待牵。 火紅的嫁衣襯著肌膚如雪其屏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天缨该,我揣著相機(jī)與錄音偎行,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛤袒,可吹牛的內(nèi)容都是我干的熄云。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妙真,長吁一口氣:“原來是場噩夢啊……” “哼缴允!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起珍德,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤练般,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锈候,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄料,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年泵琳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摄职。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虑稼,死狀恐怖琳钉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛛倦,我是刑警寧澤歌懒,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站溯壶,受9級特大地震影響及皂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜且改,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一验烧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧又跛,春花似錦碍拆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至礼烈,卻和暖如春弧满,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背此熬。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工庭呜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滑进,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓募谎,卻偏偏與公主長得像扶关,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子近哟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容