SwiftyJSON是iOS Swift語(yǔ)言JSON解析的三方庫(kù),主要是基于對(duì)iOS原生JSONSerialization類(lèi)的封裝
若想令自己所寫(xiě)的對(duì)象具有拷貝功能,則需實(shí)現(xiàn) NSCopying 協(xié)議。如果自定義的對(duì)象分為可變版本與不可變版本,那么就要同時(shí)實(shí)現(xiàn) NSCopying與 NSMutableCopying協(xié)議。
runtime 主要體現(xiàn)在以下幾個(gè)方面:
關(guān)聯(lián)對(duì)象Associated Objects消息發(fā)送Messaging消息轉(zhuǎn)發(fā)Message Forwarding方法調(diào)配Method Swizzling“類(lèi)對(duì)象” NSProxyFoundation | Apple Developer DocumentationKVC、KVOAbout Key-Value Coding?動(dòng)態(tài)獲取class 和slector??給分類(lèi)添加屬性和?KVC/KVO了。
獲取存儲(chǔ)weak對(duì)象的map,這個(gè)map的key是對(duì)象的地址,value是weak引用的地址。當(dāng)對(duì)象被釋放的時(shí)候,根據(jù)對(duì)象的地址可以找到對(duì)應(yīng)的weak引用的地址,將其置為nil即可。這就是在weak背后的黑魔法。
RC的內(nèi)部實(shí)現(xiàn)
ARC背后的引用計(jì)數(shù)主要依賴(lài)于這三個(gè)方法:retain 增加引用計(jì)數(shù)? release 降低引用計(jì)數(shù),引用計(jì)數(shù)為0的時(shí)候,釋放對(duì)象? autorelease 在當(dāng)前的auto release pool結(jié)束后,降低引用計(jì)數(shù)。
readwrite:默認(rèn)的屬性,可讀可寫(xiě),生成setter和getter方法。readonly:只讀,只生成getter方法,也就是說(shuō)不能修改變量。
assign:用于聲明基本數(shù)據(jù)類(lèi)型(int、float)僅設(shè)置變量,是賦值屬性。
retain:持有屬性,setter方法將傳入的參數(shù)先保留,再賦值,傳入的參數(shù) 引用計(jì)數(shù)retaincount 會(huì)加1
strong:強(qiáng)引用,引用計(jì)數(shù)+1,ARC下,一個(gè)對(duì)象如果沒(méi)有強(qiáng)引用,系統(tǒng)就會(huì)釋放這個(gè)對(duì)象。
weak:弱引用,不會(huì)使引用計(jì)數(shù)+1.當(dāng)一個(gè)指向?qū)ο蟮膹?qiáng)引用都被釋放時(shí),這塊空間依舊會(huì)被釋放掉。
nonatomic:非原子性,可以多線程訪問(wèn),效率高。
atomic:原子性,屬性安全級(jí)別的表示,同一時(shí)刻只有一個(gè)線程訪問(wèn),具有資源的獨(dú)占性,但是效率很低。
__weak與weak基本相同。前者用于修飾變量(variable),后者用于修飾屬性(property)。__weak 主要用于防止block中的循環(huán)引用。
__block也用于修飾變量。它是引用修飾,所以其修飾的值是動(dòng)態(tài)變化的,即可以被重新賦值的。__block用于修飾某些block內(nèi)部將要修改的外部變量。
__weak和__block的使用場(chǎng)景幾乎與block息息相關(guān)。而所謂block,就是Objective-C對(duì)于閉包的實(shí)現(xiàn)。閉包就是沒(méi)有名字的函數(shù),或者理解為指向函數(shù)的指針。
Swift 中,類(lèi)是引用類(lèi)型,結(jié)構(gòu)體是值類(lèi)型。值類(lèi)型在傳遞和賦值時(shí)將進(jìn)行復(fù)制,而引用類(lèi)型則只會(huì)使用引用對(duì)象的一個(gè)"指向"。所以他們兩者之間的區(qū)別就是兩個(gè)類(lèi)型的區(qū)別。 內(nèi)存中,引用類(lèi)型諸如類(lèi)是在堆(heap)上,而值類(lèi)型諸如結(jié)構(gòu)體實(shí)在棧(stack)上進(jìn)行存儲(chǔ)和操作。相比于棧上的操作,堆上的操作更加復(fù)雜耗時(shí),所以蘋(píng)果官方推薦使用結(jié)構(gòu)體,這樣可以提高 App 運(yùn)行的效率。
datasource協(xié)議里面東西是跟內(nèi)容有關(guān)的,主要是cell的構(gòu)造函數(shù),各種屬性
delegate協(xié)議里面的方法主要是操作相關(guān)的,移動(dòng)編輯之類(lèi)的,你都寫(xiě)上要用什么方法自己去翻就是了
簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。進(jìn)程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式:進(jìn)程有獨(dú)立的地址空間,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其它進(jìn)程產(chǎn)生影響,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí),耗費(fèi)資源較大,效率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程,不能用進(jìn)程。
一 ?iOS中都有什么設(shè)計(jì)模式?1.代理模式2.觀察者模式3.MVC模式4.單例模式5.策略模式6.工廠模式