iOS Foundation 框架簡介(下)

iOS Foundation 框架簡介(上)

接iOS Foundation 框架簡介(上)的內(nèi)繼續(xù)介紹Foundation框架內(nèi)容

站在前輩的肩膀上前行

UIKit框架和Foundation框架

011901266024074.jpg

所有的Mac OS X和IOS程序都是由大量的對象構(gòu)成异希,而這些對象的根對象都是NSObject崇决,NSObject就處在Foundation框架之中
簡書
Foundation框架大致內(nèi)容

011902445406430.jpg
011902458525930.jpg
011903203057004.jpg

網(wǎng)絡(luò)請求類---URL

  • NSCachedURLResponse

NSCachedURLResponse 是個包含 NSURLResponse 以及它對應(yīng)的緩存中的 NSData 的類,對URL請求的緩存響應(yīng)。
NSCachedURLResponse對象以NSURLResponse對象的形式提供服務(wù)器的響應(yīng)元數(shù)據(jù)岁歉,以及包含實際緩存的內(nèi)容數(shù)據(jù)的NSData對象。 它的存儲策略決定了響應(yīng)是應(yīng)該緩存在磁盤,內(nèi)存中還是根本不緩存。緩存的響應(yīng)還包含用戶信息字典肄梨,您可以在其中存儲有關(guān)緩存項目的特定于應(yīng)用程序的信息。
NSURLCache類存儲和檢索NSCachedURLResponse的實例挠锥。

  • NSURLCache

NSURLCache 為您的應(yīng)用的 URL 請求提供了內(nèi)存中以及磁盤上的綜合緩存機(jī)制众羡。將URL請求映射到緩存的響應(yīng)對象的對象。 作為基礎(chǔ)類庫 URL 加載系統(tǒng) 的一部分蓖租,任何通過 NSURLConnection 加載的請求都將被 NSURLCache 處理粱侣。

NSURLCache類通過將NSURLRequest對象映射到NSCachedURLResponse對象來實現(xiàn)對URL加載請求的響應(yīng)緩存。 它提供了一個復(fù)合內(nèi)存和磁盤緩存蓖宦,并允許您操縱內(nèi)存和磁盤部分的大小齐婴。 您還可以控制緩存數(shù)據(jù)持久存儲的路徑。網(wǎng)絡(luò)緩存減少了需要向服務(wù)器發(fā)送請求的次數(shù)稠茂,同時也提升了離線或在低速網(wǎng)絡(luò)中使用應(yīng)用的體驗柠偶。當(dāng)一個請求完成下載來自服務(wù)器的回應(yīng),一個緩存的回應(yīng)將在本地保存主慰。下一次同一個請求再發(fā)起時嚣州,本地保存的回應(yīng)就會馬上返回,不需要連接服務(wù)器共螺。NSURLCache 會 自動 且 透明 地返回回應(yīng)该肴。

NSURLCache和NSCachedURLResponse
參考:http://blog.csdn.net/wangyanchang21/article/details/51065555

  • NSHTTPCookie

在iOS中使用NSHTTPCookie類封裝一條cookie,通過NSHTTPCookie的方法讀取到cookie的通用屬性。

NSHTTPCookieStorage
NSHTTPCookieStorage單件類提供了管理所有NSHTTPCookie對象的接口藐不,在OS X里,cookie是在所有程序中共享的匀哄,而在iOS中,cookie只當(dāng)當(dāng)前應(yīng)用中有效。
通過sharedHTTPCookieStorage方法可獲取到共享的NSHTTPCookieStorage單件對象雏蛮。

NSHTTPCookie 和NSHTTPCookieStorage
參考:http://blog.csdn.net/it520nm/article/details/38868491

  • NSURL

一個 NSURL 對象代表了一個表示遠(yuǎn)程服務(wù)器資源或者本地文件的 URL涎嚼。所以在 iOS 的網(wǎng)絡(luò)請求和操作文件系統(tǒng)的 API 中,很多都需要 NSURL 類型的參數(shù)挑秉。

參考:http://www.reibang.com/p/38f5f53dfbad

  • NSURLAuthenticationChallenge

NSURLAuthenticationChallenge封裝了服務(wù)器需要驗證客戶端的證書法梯。

大多數(shù)應(yīng)用程序本身不會創(chuàng)建驗證認(rèn)證。但是,在添加對自定義網(wǎng)絡(luò)協(xié)議的支持時立哑,您可能需要創(chuàng)建身份驗認(rèn)證對象夜惭,作為自定義NSURLProtocol子類的一部分。
相反铛绰,您的應(yīng)用在各種NSURLSession诈茧,NSURLConnection和NSURLDownload委托方法(如URLSession:task:didReceiveChallenge:completionHandler:)中接收到認(rèn)證挑戰(zhàn)。這些對象提供了在決定如何處理服務(wù)器的身份驗證請求時所需的信息捂掰。該認(rèn)證挑戰(zhàn)的核心是一個保護(hù)空間敢会,它定義了被請求的認(rèn)證類型,主機(jī)和端口號这嚣,網(wǎng)絡(luò)協(xié)議以及認(rèn)證領(lǐng)域(在適用情況下)(一組相關(guān)服務(wù)器上的相關(guān)URL一套憑證)鸥昏。您的應(yīng)用通過提供NSURLCredential對象來應(yīng)對認(rèn)證認(rèn)證。細(xì)節(jié)取決于您使用的API和認(rèn)證的類型疤苹。在較高層次上互广,如果您向服務(wù)器或代理提供用戶的憑據(jù),RecommendationCredential方法將提供與NSURLCredentialStorage類中處理請求的保護(hù)空間中指定的條件相匹配的憑據(jù)(假設(shè)存在此憑據(jù)) 卧土。如果previousFailureCount方法返回0并且提出的證書存在,則提議的證書尚未嘗試像樊,這意味著您應(yīng)該嘗試尤莺。如果它返回非零結(jié)果,那么服務(wù)器已經(jīng)拒絕了使用的憑證生棍,并且應(yīng)該使用該憑證來填充密碼或證書選擇器對話框颤霎,然后提供新的憑證。您可以通過調(diào)用credentialWithUser:password:persistence:方法創(chuàng)建基于密碼的憑據(jù)涂滴,或者使用credentialWithIdentity:certificates:persistence:創(chuàng)建基于證書的憑證友酱。如果身份驗證的保護(hù)空間使用NSURLAuthenticationMethodServerTrust身份驗證方法,則請求會要求您驗證服務(wù)器的真實性柔纵。在這種情況下缔杉,recommendedCredential方法提供基于服務(wù)器作為其初始TLS握手的一部分提供的證書的憑證。大多數(shù)應(yīng)用程序都應(yīng)請求對基于服務(wù)器信任保護(hù)空間的身份驗證挑戰(zhàn)進(jìn)行默認(rèn)處理搁料,但是如果您需要覆蓋默認(rèn)的TLS驗證行為或详,則可以按照正確覆蓋TLS鏈驗證中所述進(jìn)行操作。

參考:http://www.reibang.com/p/c1826245cf86

  • NSURLCache

NSURLCache 為應(yīng)用的 URL 請求提供了內(nèi)存以及磁盤上的綜合緩存機(jī)制郭计,作為基礎(chǔ)類庫 URL 加載的一部分霸琴,任何通過 NSURLConnection 加載的請求都將被 NSURLCache 處理。將URL請求映射到緩存的響應(yīng)對象的對象昭伸。
NSURLCache類通過將NSURLRequest對象映射到NSCachedURLResponse對象來實現(xiàn)對URL加載請求的響應(yīng)緩存梧乘。 它提供了一個復(fù)合內(nèi)存和磁盤緩存,并允許您操縱內(nèi)存和磁盤部分的大小庐杨。 您還可以控制緩存數(shù)據(jù)持久存儲的路徑选调。

參考:http://www.reibang.com/p/227f8a5506fa

  • NSURLCounection (可用NSURLSession代替)

創(chuàng)一個NSURLCounection對象負(fù)責(zé)發(fā)送請求嗡善,建立客戶端和服務(wù)器的連接發(fā)送數(shù)據(jù)給服務(wù)器,使您可以啟動和停止URL請求学歧。
NSURLConnection對象允許您通過提供URL請求對象來加載URL的內(nèi)容罩引。 NSURLConnection的接口是稀疏的,只提供控件來啟動和取消URL請求的異步加載枝笨。 您在URL請求對象本身上執(zhí)行大部分配置袁铐。

參考:http://www.reibang.com/p/e72622831747

  • NSURLCredential

身份驗證憑證,包含特定于憑證類型的身份驗證信息以及要使用的持久性存儲的類型(如果有)横浑。web 服務(wù)可以在返回 http 響應(yīng)時附帶認(rèn)證要求 challenge剔桨,作用是詢問 http 請求的發(fā)起方是誰,這時發(fā)起方應(yīng)提供正確的用戶名和密碼(即認(rèn)證信息)徙融,然后 web 服務(wù)才會返回真正的 http 響應(yīng)

URL加載系統(tǒng)支持三種類型的憑證:基于密碼的用戶憑證洒缀,基于證書的用戶憑證和基于證書的服務(wù)器憑證(用于驗證服務(wù)器的身份)。創(chuàng)建憑證時欺冀,可以指定將其用于單個請求树绩,暫時保留(直到您的應(yīng)用程序退出)或永久保存(在鑰匙串中)。

參考:http://blog.csdn.net/majiakun1/article/details/17013379

  • NSURLCredentialStorage

管理身份驗證憑證存儲的對象隐轩。網(wǎng)絡(luò)安全結(jié)合網(wǎng)絡(luò)請求使用

關(guān)于如何使用參考:http://www.reibang.com/p/668b263befc8

  • NSURLDownload

一個異步下載資源并將數(shù)據(jù)保存到文件的對象饺饭。

NSURLDownload的接口提供了初始化下載,設(shè)置目標(biāo)路徑和取消加載請求的方法职车。
分配給此類的每個實例的委托對象應(yīng)該實現(xiàn)由NSURLDownloadDelegate協(xié)議定義的方法瘫俊。 這些方法為委托提供正在進(jìn)行的異步下載的當(dāng)前狀態(tài),并允許委托自定義URL加載過程悴灵。 這些委托方法在啟動相關(guān)NSURLDownload對象的異步加載操作的線程上調(diào)用扛芽。

  • NSURLProtectionSpace

來確認(rèn)用戶訪問的是安全的服務(wù)器。從一個需要驗證的服務(wù)器請求資源积瞒,服務(wù)器或服務(wù)器上的區(qū)域川尖,通常稱為領(lǐng)域,需要身份驗證赡鲜。

保護(hù)空間定義了一系列匹配約束條件空厌,用于確定應(yīng)提供哪個憑證。 例如银酬,如果請求為委托提供了請求客戶端用戶名和密碼的NSURLAuthenticationChallenge對象嘲更,則應(yīng)用程序應(yīng)為挑戰(zhàn)保護(hù)空間中指定的特定主機(jī),端口揩瞪,協(xié)議和領(lǐng)域提供正確的用戶名和密碼赋朦。

20140106092256187.jpeg

參考:http://blog.csdn.net/pingshw/article/details/17845735

  • NSURLProtocol

NSURLProtocol對象處理加載協(xié)議特定的URL數(shù)據(jù)。 NSURLProtocol類本身是一個抽象類,它提供了使用特定URL方案處理URL的基礎(chǔ)結(jié)構(gòu)宠哄。而且必須使用該類的子類壹将,并且需要被注冊。 您可以為您的應(yīng)用支持的任何自定義協(xié)議或URL方案創(chuàng)建子類毛嫉。

應(yīng)用程序永遠(yuǎn)不需要直接實例化一個NSURLProtocol子類诽俯。 當(dāng)下載開始時,系統(tǒng)創(chuàng)建相應(yīng)的協(xié)議對象來處理相應(yīng)的URL請求承粤。 您所要做的就是定義您的協(xié)議類暴区,并在您的應(yīng)用程序啟動時調(diào)用registerClass:class方法,以便系統(tǒng)知道您的協(xié)議辛臊。NSURLProtocol能夠讓你去重新定義蘋果的URL加載系統(tǒng) (URL Loading System)的行為仙粱,URL Loading System里有許多類用于處理URL請求,比如NSURL彻舰,NSURLRequest伐割,NSURLConnection和NSURLSession等,當(dāng)URL Loading System使用NSURLRequest去獲取資源的時候刃唤,它會創(chuàng)建一個NSURLProtocol子類的實例隔心,你不應(yīng)該直接實例化一個NSURLProtocol,NSURLProtocol看起來像是一個協(xié)議透揣,但其實這是一個類济炎,

參考:http://www.reibang.com/p/7c89b8c5482a

  • NSURLRequest

NSURLRequest 是一個獨(dú)立加載協(xié)議或URL方案的URL加載請求。
NSURLRequest封裝了加載請求的兩個基本數(shù)據(jù)元素:要加載的URL以及在實現(xiàn)時查詢URL內(nèi)容緩存時使用的策略辐真。

參考:https://www.cnblogs.com/HeiNeiKu/p/5628498.html

  • #NSMutableURLRequest

NSMutableURLRequest 是一個獨(dú)立于協(xié)議或URL方案的可變URL加載請求。
NSMutableURLRequest是NSURLRequest的一個子類崖堤,用于幫助開發(fā)人員發(fā)現(xiàn)為一系列URL加載請求改變一個請求對象侍咱,而不是為每個加載創(chuàng)建一個不可變的NSURLRequest對象。

使用參考:http://blog.csdn.net/codywangziham01/article/details/37691593

  • NSURLResponse

NSURLResponse類中存放請求的回執(zhí)信息密幔,在發(fā)送網(wǎng)絡(luò)請求時楔脯,如果請求成功,首先會接收到服務(wù)端的回執(zhí)信息胯甩,直接開始接收具體的返回數(shù)據(jù)昧廷。
相關(guān)的NSHTTPURLResponse類是NSURLResponse的一個常用子類,其對象表示對HTTP URL加載請求的響應(yīng)偎箫,并存儲附加的協(xié)議特定信息(如響應(yīng)頭)木柬。 每當(dāng)你發(fā)出HTTP請求時,你得到的NSURLResponse對象實際上就是NSHTTPURLResponse類的一個實例淹办。

參考:https://yq.aliyun.com/articles/39442

  • NSHTTPURLResponse

NSHTTPURLResponse類是NSURLResponse的一個子類眉枕,它提供了訪問特定于HTTP協(xié)議響應(yīng)的信息的方法。 無論何時發(fā)出HTTP URL加載請求,從NSURLSession速挑,NSURLConnection或NSURLDownload類獲得的任何響應(yīng)對象都是NSHTTPURLResponse類的實例谤牡。

//獲得當(dāng)前要下載文件的總大小(通過響應(yīng)頭得到)
 NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

我是從網(wǎng)絡(luò)解析中理解該類的使用方法和作用
參考:http://www.reibang.com/p/7f6c0480bb94

進(jìn)程間通信----interprocess Communication

  • NSPipe

相關(guān)流程之間的單向溝通渠道姥宝。
NSPipe對象提供了一個面向?qū)ο蟮慕涌趤碓L問管道翅萤。 NSPipe對象表示管道的兩端,并通過管道進(jìn)行通信腊满。 管道是相關(guān)過程之間的單向溝通渠道; 一個進(jìn)程寫入數(shù)據(jù)套么,另一個進(jìn)程讀取數(shù)據(jù)。 通過管道的數(shù)據(jù)被緩沖; 緩沖區(qū)的大小由底層操作系統(tǒng)決定糜烹。 NSPipe是一個抽象類违诗,是一個類集群的公共接口。

  • NSPort

NSPort通信渠道的抽象類疮蹦。

通信發(fā)生在NSPort對象之間诸迟,通常駐留在不同的線程或任務(wù)中。分布式對象系統(tǒng)使用NSPort對象來回發(fā)送NSPortMessage對象愕乎。盡可能使用分布式對象實現(xiàn)應(yīng)用程序間通信阵苇,并僅在必要時使用NSPort對象。要接收傳入消息感论,必須將NSPort對象作為輸入源添加到NSRunLoop對象绅项。 NSConnection對象在初始化時自動添加它們的接收端口。當(dāng)一個NSPort對象接收到一個端口消息時比肄,它將消息轉(zhuǎn)發(fā)給它的委托在一個handleMachMessage:或者h(yuǎn)andlePortMessage:消息中快耿。委托人只能實現(xiàn)其中一種方法來處理任何形式的傳入消息。 handleMachMessage:以msg_header_t結(jié)構(gòu)開始的消息作為原始的Mach消息芳绩。 handlePortMessage:提供消息作為NSPortMessage對象掀亥,它是Mach消息的面向?qū)ο蟮陌b器。如果委托沒有被設(shè)置妥色,NSPort對象處理消息本身搪花。當(dāng)您完成使用端口對象時,必須在發(fā)送釋放消息之前明確地使端口對象無效嘹害。同樣撮竿,如果您的應(yīng)用程序使用垃圾回收,則必須在刪除對其的強(qiáng)引用之前使端口對象無效笔呀。如果您沒有使端口無效幢踏,則生成的端口對象可能會留存并造成內(nèi)存泄漏。要使端口對象無效凿可,請調(diào)用其無效方法惑折∈谡耍基本定義了NSPort的三個具體子類。 NSMachPort和NSMessagePort只允許本地(在同一臺機(jī)器上)通信惨驶。 NSSocketPort允許本地和遠(yuǎn)程通信白热,但是對于本地情況,可能比其他的更昂貴粗卜。使用allocWithZone:或port創(chuàng)建NSPort對象時屋确,會創(chuàng)建一個NSMachPort對象。

  • NSMachPort

NSMachPort是NSPort的一個子類续扔,包含一個Mach端口攻臀,它是macOS中的基本通信端口。 NSMachPort只允許本地(在同一臺機(jī)器上)通信纱昧。 伴隨類NSSocketPort允許本地和遠(yuǎn)程分布式對象通信刨啸,但在本地情況下可能比NSMachPort更消耗資源。要有效地使用NSMachPort识脆,您應(yīng)該熟悉Mach端口设联,端口訪問權(quán)限和Mach消息。

使用參考:http://blog.csdn.net/yxh265/article/details/51483822

  • NSMessagePort

用于在連接之間傳輸對象代理(有時是對象本身)的編碼器灼捂。一個NSPortCoder實例是被一個NSConnection對象創(chuàng)建和使用离例,永遠(yuǎn)不需要直接自己創(chuàng)建或使用一個。
NSPortCoder是分布式對象系統(tǒng)中NSCoder的一個具體子類悉稠,用于在NSConnection對象之間傳輸對象代理(有時是對象本身)宫蛆。 ;

關(guān)于線程間的通信
感謝作者翻譯順便膜拜一下大神:http://www.reibang.com/p/c0893c93f2cb

線程鎖和線程----Locking Threading

  • NSConditionLock

條件鎖,一個線程獲得了鎖的猛,其它線程等待耀盗。
使用一個NSConditionLock對象,可以確保一個線程只有在滿足某個條件時才能獲得一個鎖卦尊。 一旦獲得了鎖并執(zhí)行了代碼的關(guān)鍵部分袍冷,線程就可以放棄鎖并將相關(guān)條件設(shè)置為新的東西。 條件本身是任意的:你根據(jù)需要為你的應(yīng)用程序定義它們猫牡。

理解參考:http://blog.csdn.net/mandmg/article/details/52280067
參考用法:http://blog.csdn.net/growinggiant/article/details/50717974

  • NSDistributedLock

NSDistributedLock是MAC開發(fā)中的跨進(jìn)程的分布式鎖,底層是用文件系統(tǒng)實現(xiàn)的互斥鎖邓线。NSDistributedLock沒有實現(xiàn)NSLocking協(xié)議淌友,所以沒有l(wèi)ock方法,取而代之的是非阻塞的tryLock方法骇陈。
鎖由文件系統(tǒng)中的條目(如文件或目錄)實現(xiàn)震庭。 對于多個應(yīng)用程序使用NSDistributedLock對象來協(xié)調(diào)其活動,該鎖定必須在可以運(yùn)行應(yīng)用程序的所有主機(jī)可訪問的文件系統(tǒng)上寫入你雌。
使用tryLock方法嘗試獲取一個鎖器联。 您通常應(yīng)該使用解鎖方法來釋放鎖而不是breakLock二汛。
NSDistributedLock不符合NSLocking協(xié)議,也沒有鎖定方法拨拓。 該協(xié)議的鎖定方法旨在阻止線程的執(zhí)行肴颊,直到成功。 對于NSDistributedLock對象渣磷,這可能意味著以某個預(yù)定的速率輪詢文件系統(tǒng)婿着。 更好的解決方案是提供tryLock方法,并讓您確定對您的應(yīng)用程序有意義的輪詢頻率醋界。

  • NSLock

NSLock鎖 ,協(xié)調(diào)同一應(yīng)用程序中多個執(zhí)行線程的操作的對象竟宋。不能用于實現(xiàn)遞歸鎖

NSLock對象可用于調(diào)解對應(yīng)用程序全局?jǐn)?shù)據(jù)的訪問,或保護(hù)代碼的關(guān)鍵部分形纺,使其能夠以原子方式運(yùn)行丘侠。

注意:NSLock類使用POSIX線程來實現(xiàn)其鎖定行為。 將解鎖消息發(fā)送給NSLock對象時逐样,必須確保該消息是從發(fā)送初始鎖定消息的同一個線程發(fā)送的蜗字。 解鎖來自不同線程的鎖可能會導(dǎo)致未定義的行為。

你不應(yīng)該使用這個類來實現(xiàn)一個遞歸鎖官研。 在同一個線程上調(diào)用兩次鎖定方法會永久鎖定線程秽澳。 使用NSRecursiveLock類來實現(xiàn)遞歸鎖。
解鎖未鎖定的鎖被視為程序員錯誤戏羽,應(yīng)在代碼中修復(fù)担神。 NSLock類通過向控制臺發(fā)送錯誤消息來報告這些錯誤。

關(guān)于鎖
總結(jié)的很六忍不住點(diǎn)個贊的參考:http://www.reibang.com/p/35dd92bcfe8c

  • NSOperation

iOS平臺提供更高級的并發(fā)(異步)調(diào)用接口始花,讓你可以集中精力去設(shè)計需完成的任務(wù)代碼妄讯,避免去寫與程序邏輯無關(guān)的線程生成、運(yùn)行等管理代碼酷宵。當(dāng)然實質(zhì)上是這些接口隱含生成線程和管理線程的運(yùn)行亥贸,從而更加簡潔地實現(xiàn)多線程
理解參考:http://blog.csdn.net/bravegogo/article/details/51155906
使用參考:http://www.reibang.com/p/0c241a4918bf

  • NSBlockOperation

NSBlockOperation用于管理一個或多個塊的并發(fā)執(zhí)行的操作。
NSBlockOperation類是NSOperation的一個具體子類浇垦,它管理一個或多個塊的并發(fā)執(zhí)行炕置。 您可以使用此對象一次執(zhí)行多個塊,而無需為每個塊創(chuàng)建單獨(dú)的操作對象男韧。 當(dāng)執(zhí)行多個塊時朴摊,操作本身只有在所有塊完成執(zhí)行后才被認(rèn)為是完成的。
添加到塊操作的塊將以默認(rèn)優(yōu)先級調(diào)度到適當(dāng)?shù)墓ぷ麝犃小?塊本身不應(yīng)該對其執(zhí)行環(huán)境的配置做任何假設(shè)此虑。

  • NSInvocationOperation

NSInvocationOperation用于管理指定為調(diào)用的單個封裝任務(wù)的執(zhí)行的操作甚纲。
NSInvocationOperation類是NSOperation的具體子類,用于啟動一個操作朦前,該操作包括調(diào)用指定對象上的選擇器介杆。 這個類實現(xiàn)了非并發(fā)操作鹃操。

NSBlockOperation和NSInvocationOperation
參考 :http://blog.csdn.net/crycheng/article/details/21799611

  • NSOperationQueue

NSOperationQueue用于調(diào)節(jié)一組操作的執(zhí)行的NSOperation加入到一個NSOperationQueue中去異步執(zhí)行隊列。
在被添加到操作隊列之后春哨,NSOperation實例將保留在該隊列中荆隘,直到被明確取消或完成其任務(wù)。隊列中的操作(但尚未執(zhí)行)本身按照優(yōu)先級和操作間對象依賴關(guān)系進(jìn)行組織悲靴,并相應(yīng)執(zhí)行臭胜。應(yīng)用程序可能會創(chuàng)建多個操作隊列并將操作提交給其中的任何一個。
即使這些操作位于不同的操作隊列中癞尚,操作間依賴也為操作提供絕對的執(zhí)行順序耸三。操作對象不被視為準(zhǔn)備好執(zhí)行,直到所有依賴操作完成執(zhí)行浇揩。對于準(zhǔn)備執(zhí)行的操作冰更,操作隊列總是執(zhí)行相對于其他就緒操作具有最高優(yōu)先級的操作隊列拘荡。有關(guān)如何設(shè)置優(yōu)先級別和依賴關(guān)系的詳細(xì)信息
添加后辜御,不能直接從隊列中刪除操作灭美。操作保持在其隊列中,直到它報告完成其任務(wù)养盗。完成任務(wù)并不一定意味著操作完成任務(wù)缚陷。操作也可以取消。取消操作對象會將隊列中的對象留在隊列中往核,但會通知對象盡快中止其任務(wù)箫爷。對于當(dāng)前正在執(zhí)行的操作,這意味著操作對象的工作代碼必須檢查取消狀態(tài)聂儒,停止正在執(zhí)行的操作虎锚,并將自己標(biāo)記為已完成。對于已排隊但尚未執(zhí)行的操作衩婚,隊列仍必須調(diào)用操作對象的start方法窜护,以便它可以處理取消事件并將其標(biāo)記為已完成。

參考:https://www.cnblogs.com/sfce/p/4329045.html

  • NSRecursiveLock

NSRecursiveLock實際上定義的是一個遞歸鎖非春,這個鎖可以被同一線程多次請求柱徙,而不會引起死鎖。這主要是用在循環(huán)或遞歸操作中奇昙。

參考:http://www.cocoachina.com/ios/20150513/11808.html

  • NSTask (貌似多用于Mac OS編程)

NSTask創(chuàng)建的是一個獨(dú)立運(yùn)行的進(jìn)程坐搔,不會與主程序共享存儲空間
使用NSTask類,您的程序可以將另一個程序作為子進(jìn)程運(yùn)行敬矩,并可以監(jiān)視該程序的執(zhí)行。 NSTask對象創(chuàng)建一個單獨(dú)的可執(zhí)行實體; 它與NSThread的區(qū)別在于它不會與創(chuàng)建它的進(jìn)程共享內(nèi)存空間蠢挡。
進(jìn)程在由當(dāng)前值定義的幾個項目的環(huán)境中運(yùn)行:當(dāng)前目錄弧岳,標(biāo)準(zhǔn)輸入凳忙,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯誤以及任何環(huán)境變量的值禽炬。 默認(rèn)情況下涧卵,NSTask對象從啟動它的進(jìn)程繼承它的環(huán)境。 如果在過程中有任何值應(yīng)該不同腹尖,例如柳恐,如果當(dāng)前目錄應(yīng)該更改,則在啟動它之前必須更改該值热幔。 進(jìn)程的環(huán)境在運(yùn)行時不能改變乐设。
一個NSTask對象只能運(yùn)行一次。

注意:在沙盒應(yīng)用程序中绎巨,使用NSTask類創(chuàng)建的子進(jìn)程將繼承父應(yīng)用程序的沙箱近尚。 您通常應(yīng)該將幫助器應(yīng)用程序編寫為XPC Services,因為XPC Services允許您為幫助器應(yīng)用程序指定不同的沙盒權(quán)利场勤。

通過NSTask用Cocoa執(zhí)行perl腳本使用:http://www.cocoachina.com/ios/20090611/97.html

  • NSThread

常用線程之一
當(dāng)你想讓Objective-C方法在自己的執(zhí)行線程中運(yùn)行時戈锻,使用這個類。 當(dāng)需要執(zhí)行冗長的任務(wù)時和媳,線程特別有用格遭,但不希望它阻塞應(yīng)用程序其余部分的執(zhí)行。 特別是留瞳,您可以使用線程來避免阻塞應(yīng)用程序的主線程拒迅,主線程處理用戶界面和與事件相關(guān)的操作。 線程也可以用來把一個大的工作分成幾個較小的工作撼港,這可能會導(dǎo)致多核計算機(jī)的性能提高坪它。
NSThread類支持類似于NSOperation的語義來監(jiān)視線程的運(yùn)行時狀態(tài)。 您可以使用這些語義來取消線程的執(zhí)行或確定線程是否仍在執(zhí)行或已經(jīng)完成其任務(wù)帝牡。 取消線程需要來自線程代碼的支持;

參考:http://www.reibang.com/p/0d4812426f72

通知---- Notifications

  • NSNotification

過通知中心向所有注冊觀察員廣播的信息容器往毡。
NSNotification對象(稱為通知)包含名稱,對象和可選字典靶溜。該名稱是標(biāo)識通知的標(biāo)簽开瞭。該對象是通知的發(fā)布者想要發(fā)送給該通知的觀察者的任何對象(通常是發(fā)布通知的對象)。字典存儲其他相關(guān)的對象罩息,如果有的話嗤详。 NSNotification對象是不可變的對象。

參考:http://www.reibang.com/p/a2cb99dcd4fe

  • NSNotificationCenter

通知中心是整個通知機(jī)制的關(guān)鍵所在瓷炮,它管理著監(jiān)聽者的注冊和注銷葱色,通知的發(fā)送和接收。通知中心維護(hù)著一個通知的分發(fā)表娘香,把所有通知發(fā)送者發(fā)送的通知苍狰,轉(zhuǎn)發(fā)給對應(yīng)的監(jiān)聽者們通知調(diào)度機(jī)制办龄,可以向登記的觀察員廣播信息。
對象向通知中心注冊淋昭,以使用addObserver:selector:name:object:或addObserverForName:object:queue:usingBlock:methods來接收通知(NSNotification對象)俐填。 當(dāng)一個對象自己添加為觀察者時,它指定應(yīng)該接收哪些通知翔忽。 因此一個對象可能會多次調(diào)用這個方法英融,以便注冊自己作為幾個不同通知的觀察者。
每個正在運(yùn)行的應(yīng)用程序都有一個defaultCenter通知中心歇式,您可以創(chuàng)建新的通知中心來組織特定情況下的通信驶悟。
通知中心只能在單個程序中發(fā)送通知; 如果要將通知發(fā)布到其他進(jìn)程或從其他進(jìn)程接收通知,請改為使用NSDistributedNotificationCenter贬丛。

參考:http://www.reibang.com/p/a2cb99dcd4fe

  • NSDistributedNotificationCenter(mas OS上才有)

每個任務(wù)都有一個缺省的分布式通告中心撩银,您可以通過NSDistributedNotificationCenter的defaultCenter類方法來訪問。這個分布式通告中心負(fù)責(zé)處理同一個機(jī)器的不通任務(wù)之間的通告豺憔。如果需要實現(xiàn)不同機(jī)器上的任務(wù)間通訊额获,請使用分布式對象。

參考:http://www.cnblogs.com/yongbufangqi1988/p/7224505.html

  • NSNotificationQueue

鑒于通知中心在發(fā)布通知時分發(fā)通知恭应,放入隊列的通知可以被延遲抄邀,直到當(dāng)前通過運(yùn)行循環(huán)結(jié)束或者直到運(yùn)行循環(huán)空閑。 重復(fù)的通知可以合并昼榛,以便只發(fā)送一個通知境肾,盡管發(fā)布了多個通知。
通知隊列以先進(jìn)先出(FIFO)順序維護(hù)通知胆屿。 當(dāng)通知移動到隊列的前面時奥喻,隊列會將其發(fā)送到通知中心,通知中心會將通知分派給注冊為觀察者的所有對象非迹。
每個線程都有一個默認(rèn)通知隊列环鲤,該通知隊列與進(jìn)程的默認(rèn)通知中心相關(guān)聯(lián)。 您可以創(chuàng)建自己的通知隊列憎兽,并且每個中心和線程都有多個隊列冷离。

創(chuàng)建一個NSNotificationQueue隊列(first in-first out),將定義的NSNotification放入其中纯命,并為其指定三種狀態(tài)之一:
typedef NS_ENUM(NSUInteger, NSPostingStyle) {
    NSPostWhenIdle = 1,      // 當(dāng)runloop處于空閑狀態(tài)時post
    NSPostASAP = 2,    // 當(dāng)當(dāng)前runloop完成之后立即post
    NSPostNow = 3    // 立即post西剥,同步(為什么需要這種type,且看三.3)
};
這樣亿汞,將NSNotification放入queue瞭空,然后根據(jù)其type,NSNotificationQueue在合適的時機(jī)將其post到NSNotificationCenter。這樣就完成了異步的需求匙铡。

通知概括的很全面:http://www.cocoachina.com/ios/20170426/19124.html

Objective-C語言服務(wù)---- Objective-c language Srevices

  • NSCoder

NSCoder數(shù)據(jù)儲存作為對象的基礎(chǔ)的抽象類图甜,使其他對象能夠存檔和分發(fā)
NSCoder抽象類聲明具體子類使用的接口在內(nèi)存和其他格式之間傳輸對象和其他值。此功能為存檔(對象和數(shù)據(jù)項存儲在磁盤上)和分配(在不同進(jìn)程或線程之間復(fù)制對象和數(shù)據(jù)項)提供了基礎(chǔ)鳖眼。由Foundation提供的具體子類是NSArchiver,NSUnarchiver嚼摩,NSKeyedArchiver钦讳,NSKeyedUnarchiver和NSPortCoder。一般將NSCoder的具體子類稱為編碼器類枕面,將這些類的實例稱為編碼器對象(或簡稱為編碼器)愿卒。只能對值進(jìn)行編碼的編碼器對象被稱為編碼器對象,并且只能將值解碼為解碼器對象潮秘。
NSCoder以對象琼开,標(biāo)量,C數(shù)組枕荞,結(jié)構(gòu)和字符串以及指向這些類型的指針進(jìn)行操作柜候。它不處理實現(xiàn)在不同平臺間變化的類型,例如union躏精,void *渣刷,函數(shù)指針和長鏈指針。編碼器對象將對象類型信息與數(shù)據(jù)一起存儲矗烛,因此從字節(jié)流解碼的對象通常與最初編碼到流中的對象具有相同的類辅柴。然而,一個對象在編碼時可以改變它的類瞭吃。這在檔案和序列編程指南中有描述碌嘀。
AV Foundation框架將方法添加到NSCoder類中,以便于創(chuàng)建包括Core Media時間結(jié)構(gòu)在內(nèi)的存檔歪架,并從存檔中提取Core Media時間結(jié)構(gòu)

參考:https://www.cnblogs.com/xiaofeixiang/p/4266156.html

  • NSArchiver

將對象的數(shù)據(jù)存儲到存檔的編碼器股冗。
NSArchiver是NSCoder的一個具體子類,它提供了一種將對象編碼成可存儲在文件中的與體系結(jié)構(gòu)無關(guān)的格式牡拇。 歸檔對象圖時魁瞪,每個對象的類信息和實例變量都會寫入歸檔。 伴隨類NSUnarchiver對檔案中的數(shù)據(jù)進(jìn)行解碼惠呼,并創(chuàng)建與原始組等價的對象圖导俘。
NSArchiver將歸檔數(shù)據(jù)存儲在可變數(shù)據(jù)對象(NSMutableData)中。 在對對象進(jìn)行編碼之后剔蹋,可以讓NSArchiver對象立即將此可變數(shù)據(jù)對象寫入文件旅薄,或者可以檢索可變數(shù)據(jù)對象以供其他用途。

  • NSKeyedArchiver

將對象的數(shù)據(jù)存儲到一鍵值對引用的存檔的編碼器。NSKeyedArchiver是NSCoder的一個具體子類少梁,它提供了一種將對象(和標(biāo)量值)編碼成可存儲在文件中的與體系結(jié)構(gòu)無關(guān)的格式洛口。歸檔一組對象時,每個對象的類信息和實例變量都寫入歸檔凯沪。伴隨類NSKeyedUnarchiver解碼檔案中的數(shù)據(jù)第焰,并創(chuàng)建一組等同于原始組的對象。
鍵控存檔與非鍵控存檔的不同之處在于妨马,編碼到存檔中的所有對象和值都被賦予名稱或鍵挺举。解碼非鍵控壓縮文件時,必須按照與編碼相同的順序?qū)χ颠M(jìn)行解碼烘跺。當(dāng)解碼一個鍵控存檔時湘纵,由于數(shù)值是按名稱來請求的,所以數(shù)值可以不按順序解碼滤淳,也可以根本不解碼梧喷。因此,密鑰存檔為前向和后向兼容提供了更好的支持脖咐。
賦予編碼值的鍵只能在當(dāng)前編碼對象的范圍內(nèi)唯一铺敌。鍵控存檔是分層的,因此對象A用于編碼其實例變量的鍵不會與對象B使用的鍵沖突文搂,即使A和B是同一類的實例适刀。但是,在一個對象中煤蹭,子類使用的鍵可能與其超類中使用的鍵相沖突
將各種類型的對象存儲到文件中笔喉,而不僅僅是字符串、數(shù)組和字典類型硝皂,有一種更靈活的方法常挚。就是利用NSKeyedAarchiver類創(chuàng)建帶鍵(keyed)的檔案來完成。
Mac OS X從版本10.2開始支持帶鍵的檔案稽物。在此之前奄毡,要使用NSArchiver類創(chuàng)建連續(xù)的(sequential)歸檔。連續(xù)的歸檔需要完全按照寫入時的順序讀取歸檔中的數(shù)據(jù)贝或。
在帶鍵的歸檔中吼过,每個歸檔字段都有一個名稱。歸檔某個對象時咪奖,會為它提供一個名稱盗忱,即鍵。從歸檔中檢索該對象時羊赵,是根據(jù)這個鍵來檢索的趟佃。這樣可以按照任意的順序?qū)ο髮懭霘w檔并進(jìn)行檢索。另外,如果向類添加了新的實例變量或刪除了實例變量闲昭,程序也可以進(jìn)行處理罐寨。

  • NSKeyedUnarchiver

NSKeyedUnarchiver是一個解碼器,用于從鍵值引用的存檔中恢復(fù)數(shù)據(jù)序矩。

NSKeyedUnarchiver是NSCoder的一個具體子類鸯绿,定義了從一個鍵入的存檔解碼一組命名對象(和標(biāo)量值)的方法。這樣的檔案由NSKeyedArchiver類的實例產(chǎn)生簸淀。
鍵控歸檔被編碼為對象的層次結(jié)構(gòu)楞慈。層次結(jié)構(gòu)中的每個對象都作為其他對象編碼的名稱空間】胁粒可用于解碼的對象僅限于在特定對象的直接范圍內(nèi)編碼的對象。在層次結(jié)構(gòu)的其他地方編碼的對象饿悬,不論是高于令蛉,低于還是與此特定對象平行,都是不可訪問的狡恬。通過這種方式珠叔,特定對象用于編碼其實例變量的鍵只需在該對象的范圍內(nèi)是唯一的。
如果使用歸檔中不存在的鍵調(diào)用此類的其中一個decode ...方法弟劲,則返回非正值祷安。該值因解碼類型而異。例如兔乞,如果存檔中不存在密鑰汇鞭,則decodeBoolForKey:返回NO,decodeIntForKey:返回0庸追,decodeObjectForKey:返回nil霍骄。
NSKeyedUnarchiver支持有限類型的強(qiáng)制。編碼為任何類型的整數(shù)的值淡溯,無論是標(biāo)準(zhǔn)的int還是明確的32位或64位整數(shù)读整,都可以使用任何整數(shù)解碼方法來解碼。同樣咱娶,編碼為float或double的值可以解碼為float或double值米间。如果編碼值太大而不能適應(yīng)強(qiáng)制類型,則解碼方法將拋出NSRangeException膘侮。此外屈糊,當(dāng)試圖強(qiáng)制一個不兼容類型的值時,例如將一個int解碼為一個float喻喳,解碼方法將拋出一個NSInvalidUnarchiveOperationException異常另玖。

NSKeyedArchiver 和NSKeyedUnarchiver
參考:http://www.reibang.com/p/6ad8447ce8ac

  • NSUnarchiver

NSUnarchiver類可以通過解碼歸檔文件獲得對象。從檔案中恢復(fù)數(shù)據(jù)的解碼器。
NSUnarchiver是NSCoder的一個具體子類谦去,定義了從一個存檔解碼一組Objective-C對象的方法慷丽。 這樣的檔案由NSArchiver類的對象產(chǎn)生。

NSArchiver類和NSUnarchiver
參考:http://blog.csdn.net/sps900608/article/details/51898671

  • NSPropertyListSerialization

NSPropertyListSerialization這個類提供了一些方法,專門用來轉(zhuǎn)換不同組織形式的list對象.list對象包括了NSData, NSString, NSArray, NSDictionary, NSDate, 以及 NSNumber.

參考:https://www.cnblogs.com/YouXianMing/p/3642282.html

  • NSAssertionHandler

NSAssertionHandler實例是自動創(chuàng)建的鳄哭,用于處理錯誤斷言要糊。斷言宏,比如NSAssert和NSCAssert妆丘,用于評估一個條件锄俄,如果條件評估為錯誤,這個宏向NSAssertionHandler實例發(fā)送一個表示錯誤的字符串勺拣。每個線程都有它自己的NSAssertionHandler實例奶赠。斷言處理程序調(diào)用的時候,會打印一條錯誤信息药有,包含斷言的方法或類毅戈,并拋出一個NSInternalInconsistencyException。

參考:http://blog.csdn.net/baitongzbt/article/details/39833935

  • NSAutoreleasePool

自動釋放池 :當(dāng)您向一個對象發(fā)送一個autorelease消息時愤惰,Cocoa就會將該對象的一個引用放入到最新的自動釋放池苇经。它仍然是個正當(dāng)?shù)膶ο螅虼俗詣俞尫懦?定義的作用域內(nèi)的其它對象可以向它發(fā)送消息宦言。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時扇单,自動釋放池就會被釋放,池中的所有對象也就被釋放

參考:http://blog.csdn.net/tongseng/article/details/52101476

  • NSClassDescription

NSClassDescription用于查詢類的關(guān)系和屬性的接口的抽象類奠旺。
NSClassDescription的具體子類提供了特定類的對象的可用屬性以及該類與其他類之間的關(guān)系蜘澜。定義類之間的這些關(guān)系允許使用鍵值編碼更智能和靈活地處理對象。
需要注意的是凉倚,默認(rèn)情況下沒有類描述兼都。要在你的代碼中使用NSClassDescription對象,你必須為你的模型類實現(xiàn)它們稽寒。對于所有具體的子類扮碧,您必須為NSClassDescription的所有實例方法提供實現(xiàn)。 (NSClassDescription只提供維護(hù)已注冊類描述緩存的類方法的實現(xiàn)杏糙。)創(chuàng)建后慎王,必須使用NSClassDescription方法registerClassDescription:forClass:注冊類描述。
您可以在由諸如attributeKeys和toManyRelationshipKeys等方法返回的數(shù)組中使用NSString對象來訪問(使用鍵值編碼)類描述對象所對應(yīng)類的實例的屬性宏侍。有關(guān)屬性和關(guān)系的更多信息赖淤,請參閱Cocoa基礎(chǔ)知識指南。有關(guān)鍵值編碼的更多信息谅河,請參閱鍵值編碼編程指南咱旱。
用于映射可編寫腳本類之間關(guān)系的NSScriptClassDescription是作為Cocoa框架的一部分提供的NSClassDescription的唯一具體子類确丢。

  • NSException

控制臺輸出的日志信息就是NSException產(chǎn)生的,一旦程序拋出異常吐限,程序就會崩潰鲜侥,控制臺就會有這些崩潰日志。

最熟悉的陌生類 強(qiáng)大的令人窒息 感謝作者讓我知道了這個家伙
參考:http://www.reibang.com/p/05aad21e319e

  • NSLnvocation

在消息轉(zhuǎn)發(fā)中提到過NSInvocation這個類诸典,這里說一下我所理解的NSInvocation描函。NSInvocation 是命令模式的一種實現(xiàn),它包含選擇器狐粱、方法簽名舀寓、相應(yīng)的參數(shù)以及目標(biāo)對象。所謂的方法簽名肌蜻,即方法所對應(yīng)的返回值類型和參數(shù)類型互墓。當(dāng)NSInvocation被調(diào)用,它會在運(yùn)行時通過目標(biāo)對象去尋找對應(yīng)的方法蒋搜,從而確保唯一性轰豆,可以用[receiver message]來解釋。實際開發(fā)過程中直接創(chuàng)建NSInvocation的情況不多見齿诞,這些事情通常交給系統(tǒng)來做

很六的類
參考:http://www.reibang.com/p/05aad21e319e

  • NSMethodSignature

NSMethodSignature顧名思義應(yīng)該就是“方法簽名”,類似于C++中的編譯器時的函數(shù)簽名骂租。
官方定義該類為對方法的參數(shù)祷杈、返回類似進(jìn)行封裝,協(xié)同NSInvocation實現(xiàn)消息轉(zhuǎn)發(fā)渗饮。

參考:http://blog.csdn.net/dean19900504/article/details/8737862

  • NSUndoManager

NSUndoManager允許記錄用戶執(zhí)行的操作并且反轉(zhuǎn)這類操作但汞。

當(dāng)你調(diào)用一個可以改變一些東西的方法或者是執(zhí)行一個改變屬性值的動作(例如 setter 方法)時,你可以注冊這個操作來進(jìn)行撤銷互站。

一個撤銷操作包含了接收消息的對象私蕾,發(fā)送消息以及參數(shù) - 通常你會傳入原始值。

NSUndoManager實例支持重做操作胡桃,所以才能逆轉(zhuǎn)操作踩叭。你可以認(rèn)為這個管理器擁有兩個棧。實際上翠胰,它管理兩個棧容贝,undo(撤銷)棧和redo(重做)棧 - 對應(yīng)NSUndoManager的私有屬性_undoStack和_redoStack,里面存儲著一些操作之景。

媽媽再也不擔(dān)心我弄錯東西了
參考:http://www.reibang.com/p/df572c44a82c

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斤富,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锻狗,更是在濱河造成了極大的恐慌满力,老刑警劉巖焕参,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異油额,居然都是意外死亡叠纷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門悔耘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讲岁,“玉大人,你說我怎么就攤上這事衬以』貉蓿” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵看峻,是天一觀的道長阶淘。 經(jīng)常有香客問我,道長互妓,這世上最難降的妖魔是什么溪窒? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮冯勉,結(jié)果婚禮上澈蚌,老公的妹妹穿的比我還像新娘。我一直安慰自己灼狰,他們只是感情好宛瞄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著交胚,像睡著了一般份汗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝴簇,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天杯活,我揣著相機(jī)與錄音,去河邊找鬼熬词。 笑死旁钧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的互拾。 我是一名探鬼主播均践,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摩幔!你這毒婦竟也來了彤委?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤或衡,失蹤者是張志新(化名)和其女友劉穎焦影,沒想到半個月后车遂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斯辰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年舶担,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彬呻。...
    茶點(diǎn)故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡衣陶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闸氮,到底是詐尸還是另有隱情剪况,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布蒲跨,位于F島的核電站译断,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏或悲。R本人自食惡果不足惜孙咪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巡语。 院中可真熱鬧翎蹈,春花似錦、人聲如沸男公。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽理澎。三九已至,卻和暖如春曙寡,著一層夾襖步出監(jiān)牢的瞬間糠爬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工举庶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留执隧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓户侥,卻偏偏與公主長得像镀琉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蕊唐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評論 2 348

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