2016.05筆記


RunTime

Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事放到了運(yùn)行時(shí)來處理。這種動態(tài)語言的優(yōu)勢在于:我們寫代碼時(shí)更具靈活性,如我們可以把消息轉(zhuǎn)發(fā)給我們想要的對象,或者隨意交換一個方法的實(shí)現(xiàn)等。

這種特性意味著Objective-C不僅需要一個編譯器,還需要一個運(yùn)行時(shí)系統(tǒng)來執(zhí)行編譯的代碼。對于Objective-C來說,這個運(yùn)行時(shí)系統(tǒng)就像一個操作系統(tǒng)一樣:它讓所有的工作可以正常的運(yùn)行。這個運(yùn)行時(shí)系統(tǒng)即Objc Runtime。Objc Runtime其實(shí)是一個Runtime庫,它基本上是用C和匯編寫的,這個庫使得C語言有了面向?qū)ο蟮哪芰Α?/p>

所謂運(yùn)行時(shí),也就是在編譯時(shí)是不存在的,只是在運(yùn)行過程中才去確定對象的類型、方法等。利用Runtime機(jī)制可以在程序運(yùn)行時(shí)動態(tài)修改類、對象中的所有屬性、方法等。

在使用運(yùn)行時(shí)的地方,都需要包含頭文件:#import<objc/runtime.h>

1、Category增加屬性

2、NSCoding的自動歸檔和自動解檔

3、字典和模型的自動轉(zhuǎn)換

4、系統(tǒng)自帶方法動態(tài)重寫

5、獲取類的所有成員變量的類型和名稱

6、動態(tài)地創(chuàng)建一個類(KVO的底層實(shí)現(xiàn))


【Objective-C】垃圾回收機(jī)制和ARC

ARC:自動引用計(jì)數(shù)(automatic reference counting),當(dāng)你在編譯程序時(shí)提供自動管理內(nèi)存的功能,它會為程序自動加入內(nèi)存的控制Retain/Release,底層機(jī)制依舊是引用計(jì)數(shù)對內(nèi)存進(jìn)行管理。

垃圾回收:objective-c 2.0引入了自動內(nèi)存管理機(jī)制,也被稱為垃圾回收。垃圾回收功能只支持OS X應(yīng)用開發(fā),無法用在iOS應(yīng)用程序上。因此iOS程序是要管理內(nèi)存的,ARC不是自動內(nèi)存管理,只是在編譯的時(shí)候適當(dāng)插入Retain/Release.


屬性修飾

atomic:原子操作,加了原子鎖,是Setter/Getter兩個函數(shù)的原語操作,相當(dāng)于在函數(shù)首尾加上了鎖,當(dāng)多個線程操作Setter/Getter函數(shù)時(shí),一個線程執(zhí)行完畢之前,不會出現(xiàn)另一個線程執(zhí)行的情況,這樣可以保證線程安全,默認(rèn)是atomic

nonatomic:非原子操作,單線程使用這個,因?yàn)樾时容^高,多線程會有可能線程不安全。

readonly:只會生成Getter方法,不會生成Setter方法

readwrite:生成Getter和Setter方法

copy:復(fù)制一個對象并創(chuàng)建strong關(guān)聯(lián),引用計(jì)數(shù)為1 ,原來對象計(jì)數(shù)不變,修飾NSString時(shí)為深復(fù)制,內(nèi)容拷貝。可用來修飾block,將block移到堆里面,使得block被聲明的作用域被銷毀仍可繼續(xù)使用

strong(Retain):對原對象引用計(jì)數(shù)加1。指針拷貝,修飾NSString時(shí)為淺復(fù)制。

assign:對指針賦值,不涉及引用計(jì)數(shù)的變化,弱引用。對象不能使用assign,數(shù)據(jù)類型(BOOL、int、float)使用

weak:修飾基礎(chǔ)類型外的NSObject和其他子類,比assign多了一個功能,對象釋放后把指針置為nil,避免了野指針。assigin 可以用非 OC 對象,而 weak 必須用于 OC 對象。

變量修飾

_ _strong:是缺省的關(guān)鍵詞,強(qiáng)引用。

_ _weak:聲明了一個可以自動置nil的弱引用(ARC中)。

_ _unsafe_unretained:聲明一個弱引用,但是不會自動nil化(只有iOS 4 才應(yīng)該使用)。

_ _autoreleasing:用來修飾一個函數(shù)的參數(shù),這個參數(shù)會在函數(shù)返回的時(shí)候被自動釋放(類似autorelease)。


iOS常用模式

1、MVC

2、代理模式:Delegate

3、觀察者模式:只發(fā)布消息,不關(guān)心誰接收,NotificationCenter,KVO

4、單例模式:[NSUserDefaults standardUserDefaults]

5、裝飾器模式:裝飾器模式在不修改原來代碼的情況下動態(tài)的給對象(而不是類)增加新的行為和職責(zé),Category

6、工廠模式:類方法,[NSNumber numberWithBool];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,607評論 30 472
  • 1.1 什么是自動引用計(jì)數(shù) 概念:在 LLVM 編譯器中設(shè)置 ARC(Automaitc Reference Co...
    __silhouette閱讀 5,469評論 1 17
  • 29.理解引用計(jì)數(shù) Objective-C語言使用引用計(jì)數(shù)來管理內(nèi)存,也就是說,每個對象都有個可以遞增或遞減的計(jì)數(shù)...
    Code_Ninja閱讀 1,728評論 1 3
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景。SDWebImage的原...
    LZM輪回閱讀 2,117評論 0 12
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,247評論 0 7

友情鏈接更多精彩內(nèi)容