Mac 開發(fā)的神秘面紗:后娘養(yǎng)的嫡長(zhǎng)子

本來,標(biāo)題是「揭開 macOS 開發(fā)的神秘面紗」泄隔,可想想,以我目前對(duì) macOS 開發(fā)的理解宛徊,還是去掉「揭開」二字吧 ??

本文不是系統(tǒng)性的文章佛嬉,更像是 隨筆≌⑻欤回想自己過去 1.6 年的 macOS 開發(fā)歷程暖呕,挑些有意思的來說。如果想看完就去挖 macOS 這座金礦(如果是的話)苞氮,你會(huì)失望的湾揽;且作佚事來讀吧

注:嚴(yán)格地說笼吟,應(yīng)該叫作「macOS 開發(fā)」库物,因?yàn)槿ツ昶穑O果將 Mac 操作系統(tǒng)更名為 macOS贷帮;不過戚揭,蘋果電腦依舊以 Mac 命名,如 MacBookPro皿桑,故而 Mac 開發(fā)也說得過去毫目;再加上蔬啡,以小寫字母開頭作為文章名,總覺得怪怪的镀虐,是以本文混用「Mac 開發(fā)」與「macOS 開發(fā)」

----- 長(zhǎng)文開始警戒線箱蟆;不喜請(qǐng)繞行 -----

0) Mac 是后娘養(yǎng)的嫡長(zhǎng)子

說 Mac 是嫡長(zhǎng)子,是因?yàn)?蘋果就是做電腦起家的刮便。雖說后來 iPod空猜、iPhone 風(fēng)生水起,但嫡長(zhǎng)子的血統(tǒng)還是純正的恨旱;而 iOS 正是基于 macOS 開發(fā)的辈毯。這里的故事很多,感興趣可以讀讀《喬布斯傳》之類的書或文章搜贤。

可惜的是谆沃,有了 iPhone 這棵搖錢樹之后,Mac 電腦靠邊站了仪芒,macOS 自然也被冷落唁影,不到萬不得已,不更新掂名;即使更新据沈,也像擠牙膏一樣。

Mac 哪里被冷落了饺蔑?多了去了锌介。

比如,我每周都會(huì)收到一款蘋果給開發(fā)者的郵件猾警,本意是告知本周 App 的活躍程度建峭。而我每次收到的郵件內(nèi)容都是這樣的:

因?yàn)槲疑形瓷霞?iOS 應(yīng)用显晶、只有 macOS App恐锦;而 在蘋果看來次乓,macOS App 豈能叫 App ?雳窟!是以尊浪,這里的數(shù)據(jù)是空的…

其它的,不勝枚舉封救。

1) Mac 是個(gè)小市場(chǎng)

有多心吹印?

先說說硬件誉结,這是 2016 第四季度出貨量對(duì)比:

設(shè)備 出貨量 營(yíng)收
Mac 537 萬 72 億美元
iPhone 7,830 萬 543 億美元

不論是出貨量鹅士、還是營(yíng)收,均是零頭惩坑。

再來看看 App 的數(shù)量:

AppShopper 的數(shù)據(jù)來看掉盅,不足 3 萬的 macOS App 數(shù)量也拜,不到 iOS App 的 1%;對(duì)趾痘,是「百分之一」慢哈,零頭的零頭

當(dāng)然永票,這里主要統(tǒng)計(jì)的是上架 MAS (Mac App Store) 的應(yīng)用卵贱,在 MAS 之外也有很多。不過侣集,2 個(gè)數(shù)量級(jí)的差異键俱,沒跑。

現(xiàn)說說操作系統(tǒng)占比:

據(jù) MarketShare 的數(shù)據(jù)世分,macOS 僅占 6.12%编振,僅有 Windows 用戶的 6.7%.

其中,macOS 版本的分散程度罚攀,雖比 Windows 好很多党觅,但也 不如 iOS:

看到這里雌澄,是不是覺得有些心涼斋泄,覺得 Mac 好可憐有沒有…

不過,Mac 電腦確實(shí)是在慢慢增加的镐牺,知名度也在變高炫掐。比如,國(guó)內(nèi)現(xiàn)代都市劇中出現(xiàn)的電腦睬涧,大多都是 Mac募胃;蘋果也剛剛宣布 全球 Mac 活躍用戶有 1 億

2) Swift or Objective-C

我開發(fā)的應(yīng)用 (Klib畦浓、iPic痹束、iPic MoveriPaste讶请、iTimer祷嘶、iHosts),全部基于 Swift夺溢;不過论巍,即使你也打算基于 Swift,還是建議對(duì) Objective-C 有基本的了解风响。因?yàn)榧翁吘?Objective-C 是蘋果一直以來使用的開發(fā)語言,絕大多數(shù)的文檔状勤、教程鞋怀,都是基于 Objective-C 的双泪。

雖說可以很容易地改編為 Swift、或被 Swift 調(diào)用密似,但這就像是:你有一本英文詞典攒读,理論上就可以直接看英文文章,因?yàn)榭匆姴欢膯卧~可以查嘛辛友;但也知道薄扁,這不現(xiàn)實(shí),畢竟你總不能每個(gè)單詞都查吧废累?

所以:

  • 如果你已經(jīng)有 Objective-C 基礎(chǔ)邓梅,就直接使用 Objective-C 開發(fā) Mac 應(yīng)用好了。要不要學(xué) Swift邑滨?看你自己心情日缨,我不提供建議;
  • 如果你并沒有 Objective-C 基礎(chǔ)掖看,建議你先學(xué)學(xué) Objective-C 基礎(chǔ)匣距,然后再學(xué) Swift,并基于 Swift 開發(fā)哎壳。

3) Mac 文檔及教程

官方文檔主要有這些:

實(shí)際上刹泄,由于我們一般是「面向 Google 編程」外里,一般遇到問題都是先搜索,不太需要記錄這些網(wǎng)址特石。只是盅蝗,如果你想系統(tǒng)性、深入地學(xué)習(xí)某個(gè)點(diǎn)時(shí)姆蘸,可以正向地從官方文檔入手墩莫。

不過,對(duì)于 蘋果的開發(fā)文檔乞旦,友情提醒:并不怎么好贼穆。如果套用這句話:
「為什么懂得這么多道理,卻仍過不好這一生兰粉?」

便是:
為什么我看了所有 Mac 文檔故痊,卻仍無法開發(fā) Mac 應(yīng)用?

文檔更多是偏向?qū)δ硞€(gè)具體知識(shí)點(diǎn)的介紹玖姑,而如果想系統(tǒng)性地入門 macOS愕秫,最好是通過一本好的書慨菱,以及自己的練習(xí)。由于 iPhone 的熱銷戴甩,市面上 iOS 的書符喝,可謂汗牛充棟。而 macOS 的書呢甜孤?呵呵协饲。

我自己是看《Cocoa Programming for Mac OS X》這本書入門 macOS 開發(fā)的,這幾乎是我在 2015 年能找到的唯一一本基于 Swift 的 macOS 開發(fā)教程缴川。另外一本是 Swift Development with Cocoa茉稠,跟這本書沒法比。

其他 macOS 的書把夸,我看的不多而线,也沒什么好推薦的。如果你有覺得哪本書不錯(cuò)恋日,歡迎留言告訴我膀篮。

4) macOS 數(shù)據(jù)結(jié)構(gòu)及持久化

首先要說的是,雖說是 macOS 開發(fā)岂膳,但實(shí)際上很多基礎(chǔ)的東西都是通用的誓竿,比如 JSON 格式、MySQL 數(shù)據(jù)庫等等闷营。

另外烤黍,macOS 和 iOS 相比,像 TouchBar 這種獨(dú)有的東西傻盟,并不多;更多的是通用的嫂丙,或者說是并行的兩套娘赴。

使用 plist 文件存儲(chǔ)數(shù)據(jù):

  • 默認(rèn)僅支持簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu);此方式僅適合保存少量數(shù)據(jù)跟啤,如偏好設(shè)置中的 On/Off 選項(xiàng)
  • 可使用 UserDefaults 管理默認(rèn)的 plist 文件诽表。注意:沙盒模式和普通模式下默認(rèn)的 plist 文件的位置不同
  • 可在命令行中使用 defaults 命令來管理 plist 文件中的數(shù)據(jù)
  • 可使用 Xcode 打開 plist 文件進(jìn)行管理

序列化后存儲(chǔ):

  • 對(duì)于自定義類型,適配 NSSecureCoding 協(xié)議后隅肥,可使用 NSKeyedArchiver 轉(zhuǎn)換為 Data 格式
  • 進(jìn)而竿奏,可存儲(chǔ)在普通文件中,也可存儲(chǔ)于 plist 文件中

Core Data:

  • Core Data 本質(zhì)上是對(duì)數(shù)據(jù)訪問方式的封裝
  • 對(duì)于簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)腥放,使用 Core Data 會(huì)帶來額外的復(fù)雜度泛啸,并不劃算。對(duì)于復(fù)雜的應(yīng)用秃症,Core Data 可以顯著減少代碼量
  • 持久化方面候址,Core Data 提供了對(duì)象-關(guān)系映射 (ORM) 的功能吕粹,不編寫任何SQL語句,即可將數(shù)據(jù)保存在 SQLite 數(shù)據(jù)庫文件中岗仑,也能還原到內(nèi)存中

CloudKit:

  • 存儲(chǔ)方面匹耕,CloudKit 本質(zhì)上類似于云端的關(guān)系數(shù)據(jù)庫
  • 除了存儲(chǔ),CloudKit 更有用的場(chǎng)景荠雕,是在多設(shè)備稳其、macOS 與 iOS 間同步數(shù)據(jù)。比如炸卑,系統(tǒng)自帶的 Notes 等應(yīng)用欢际,均是通過 CloudKit 來存儲(chǔ)、同步數(shù)據(jù)矾兜。其中损趋,通知機(jī)制可以最小化需要同步的數(shù)據(jù)量
  • 再有,就是提供基于 CloudKit 的共享功能

注:數(shù)據(jù)持久化存儲(chǔ)方式有非常多椅寺,也要視具體的需求而定浑槽;這里僅提及一些常用的方式。

5) macOS 界面開發(fā)

我們所說 macOS 開發(fā)返帕,通常默認(rèn)指開發(fā)「有界面及交互的桐玻、能運(yùn)行在 macOS 上的應(yīng)用」,其核心荆萤,就在于界面及交互镊靴。

我們也常聽到 Cocoa,那 什么是 Cocoa 呢链韭?援引《Cocoa Programming for OS X》中的介紹:

Cocoa is your application’s interface to the window server to receive events and draw to the screen. At the same time it has access to the Unix layer where it can make lower level calls.

也就是說偏竟,Cocoa 是這樣一個(gè)中間環(huán)節(jié):負(fù)責(zé)銜接你的應(yīng)用與窗口系統(tǒng),同時(shí)也可直接操作系統(tǒng)底層敞峭。

界面的開發(fā)踊谋,是個(gè)無底洞;可以是個(gè)簡(jiǎn)單的單窗口應(yīng)用旋讹,也可以是 Pages殖蚕、iMovie 這樣復(fù)雜的應(yīng)用。

對(duì)于初學(xué)者沉迹,建議從菜單欄程序入手睦疫。可以暫時(shí)繞開窗口鞭呕、控件這些復(fù)雜的話題蛤育,又可以創(chuàng)建出能解決實(shí)際問題的一些應(yīng)用。比如,iPic 主交互即位于菜單欄:

這部分缨伊,可參見我之前寫的教程:Status Bar App 教程是 16 年 4 月寫的摘刑,現(xiàn)在來看有些可能已經(jīng)過時(shí),比如當(dāng)時(shí)是基于 Swift 2.2刻坊;不過整體還是可以參考的枷恕。

回到界面的開發(fā)。首先谭胚,要理解 App 的整體生命周期徐块。尤其是 App 啟動(dòng)時(shí),都做了哪些事灾而、先后順序及依賴是什么胡控。

然后,實(shí)際的工作旁趟,就是搞定界面布局昼激,以及熟悉一個(gè)個(gè)控件的用法,如 NSButton锡搜、NSTextField橙困、NSTableView 等等。建議的學(xué)習(xí)步驟:

  • 先隨意玩玩耕餐,能讓控件跑起來凡傅;一些控件復(fù)雜,跑不起來也不用覺得沮喪
  • 如果官方有 Programming Guide肠缔,認(rèn)真讀一遍
  • 如果官方有示例程序夏跷,學(xué)習(xí)之,熟悉正確的用法
  • 過一遍 API Reference明未,了解控件所有的可能性和局限
  • 解決自己實(shí)際的問題槽华,真正用起來

我一般的開發(fā)步驟:

  • 想清楚數(shù)據(jù)結(jié)構(gòu)
  • 堆 UI
  • 完成業(yè)務(wù)邏輯

6) macOS 設(shè)計(jì)模式之解耦

隨著程序變得復(fù)雜,代碼變多亚隅,也很容易交織在一起硼莽。對(duì)于進(jìn)一步開發(fā)和維護(hù),是非常頭痛的事煮纵。

怎么避免這樣的情況呢?其中一個(gè)思路是:解耦偏螺。

抽象的說行疏,就是 把復(fù)雜的東西拆成一個(gè)個(gè)獨(dú)立的模塊,然后通過一些方式讓這些模式有機(jī)地組合在一起套像。

有哪些方式呢酿联?順著這個(gè)思路,我列出一些概念。

MVC模式 (Model-View-Controller)

  • 這一模式在界面開發(fā)里大量使用贞让,比如你經(jīng)持苷福看到的 XXViewController,就是其中的 Controller 部分
  • 簡(jiǎn)單的說喳张,就是 把界面與邏輯分離续镇。界面部分,如布局销部、樣式等摸航。通常,代碼量最多的舅桩,都是在 Controller 中酱虎。View 與 Controller 之間,通過引用擂涛、綁定來傳遞數(shù)據(jù)读串,即將數(shù)據(jù)顯示在界面中、從界面讀取用戶產(chǎn)生的數(shù)據(jù)

Delegate

  • 有兩個(gè)角度來理解代理撒妈。以 NSWindowDelegate 為例恢暖,可理解為 Window 本身有豐富的可定制性,程序可選擇性地實(shí)現(xiàn)某些功能踩身、特性
  • 另一個(gè)角度是胀茵,同樣對(duì)于 NSWindowDelegate,對(duì)事件(如窗口即將關(guān)閉)的響應(yīng)挟阻,Window 本身是不知道的琼娘,或者說是具體的業(yè)務(wù)相關(guān)的。Window 自己做不到附鸽,只能委托給自己的「代理」去決定脱拼。比如,當(dāng)窗口即將關(guān)閉時(shí)坷备,程序提示用戶保存未保存的數(shù)據(jù)

Callback

  • 對(duì)于非實(shí)時(shí)的操作熄浓,可以使用 Callback 回調(diào)的方式,來解耦調(diào)用者和執(zhí)行者之間的等待
  • 比如省撑,程序在從網(wǎng)絡(luò)下載圖片時(shí)赌蔑,可能需要 1ms,也可能需要 2s竟秫,程序總不能傻等著娃惯。于是,程序告訴下載的模塊:我去忙別的事了肥败,你下載好了告訴我趾浅。怎么告訴愕提?就是通過 Callback 回調(diào)機(jī)制實(shí)現(xiàn)
  • 與之關(guān)聯(lián)的概念,如代碼塊

Notification

  • 對(duì)于「如果…就…」這樣的邏輯皿哨,比較適合的是通知機(jī)制
  • 這里的通知浅侨,不止是從網(wǎng)絡(luò)上推送下來的通知,也可以是程序內(nèi)部的通知
  • 比如证膨,用戶在偏好設(shè)置的界面中完成賬戶升級(jí)后如输,在程序內(nèi)發(fā)出賬戶類型變更的通知;程序的主窗口之前注冊(cè)以監(jiān)聽這一通知椎例,便可根據(jù)賬戶類型實(shí)時(shí)調(diào)整界面

7) 發(fā)布 macOS 應(yīng)用

自己辛苦開發(fā)的程序挨决,通常是愿意讓更多人來用的。如果能賺點(diǎn)小錢订歪,當(dāng)然更好啦脖祈。

7.0) macOS 應(yīng)用簽名

對(duì)于簡(jiǎn)單的程序,可以復(fù)制到別的電腦上運(yùn)行刷晋,但最好還是要對(duì)程序進(jìn)行簽名盖高。尤其是使用 CloudKit 等一些蘋果特性的程序,必須簽名眼虱。

怎么簽名呢喻奥?前提是交錢。也就是捏悬,必須每年交給蘋果 $99 的人頭稅撞蚕,才能成為蘋果開發(fā)者,進(jìn)而給應(yīng)用簽名过牙。

7.1) MAS 與沙盒模式

在 MAS (Mac App Store) 上提交的應(yīng)用甥厦,必須運(yùn)行在沙盒模式中。

沙盒模式有諸多限制寇钉,比如刀疙,默認(rèn)不能訪問用戶的任何文件、一些接口無法使用等等扫倡。和 iOS 的沙盒模式相比谦秧,macOS 的沙盒模式還是寬松很多的。以訪問文件的權(quán)限為例撵溃,應(yīng)用可以申請(qǐng)?jiān)L問如 Downloads 等指定目錄疚鲤。向誰申請(qǐng)呢?蘋果缘挑,而不是用戶石咬。一旦通過(雖然并不容易),便可直接訪問該目錄卖哎,無需用戶授權(quán)。

事實(shí)上,沙盒模式確實(shí)限制了程序的發(fā)揮空間亏娜,一些應(yīng)用(如屏幕取詞翻譯焕窝、截圖工具)干脆無法上架,或者額外開通「Accessibility」權(quán)限才能正常工作维贺。而據(jù)說蘋果已不再放行需要此權(quán)限的應(yīng)用上架它掂。

7.2) MAS 付費(fèi)方式

蘋果支持多種內(nèi)購(gòu)方式,要想通過應(yīng)用收費(fèi)溯泣,最簡(jiǎn)單的方式是:設(shè)置程序必須付費(fèi)才能下載虐秋。這樣,程序內(nèi)無需區(qū)分免費(fèi)版與高級(jí)版垃沦,無需做任何功能限制客给,代碼簡(jiǎn)單。蘋果系統(tǒng)保證了肢簿,使用哪個(gè) Apple ID 下載的應(yīng)用靶剑,只能在使用哪個(gè) Apple ID 上登錄的電腦上使用。比如池充,你自己購(gòu)買了某個(gè)付費(fèi)應(yīng)用桩引,直接把 .app 復(fù)制到朋友的電腦上,是無法運(yùn)行的收夸。

不過坑匠,這一方式也有局限:用戶在付費(fèi)之前,無法體驗(yàn)到產(chǎn)品的所有功能卧惜,也就很難決定是否要付費(fèi)厘灼。對(duì)于這一局限,一些程序的做法時(shí):在產(chǎn)品官網(wǎng)提供一個(gè)全功能序苏、但僅能運(yùn)行一段時(shí)間(如 7 天)的 體驗(yàn)版手幢。這樣,用戶可以在體驗(yàn)所有功能后忱详,決定是否購(gòu)買围来。

再進(jìn)一步,就是 免費(fèi)版 + 內(nèi)購(gòu)的模式匈睁。用戶可免費(fèi)下載應(yīng)用监透,但應(yīng)用僅開放基礎(chǔ)功能,需要內(nèi)購(gòu)才能使用高級(jí)功能航唆。這樣胀蛮,既能最大化地獲取用戶,又能適時(shí)地收費(fèi)糯钙,我的所有應(yīng)用都采用此方式粪狼,相信也是未來一段時(shí)間的趨勢(shì)退腥。

對(duì)于內(nèi)購(gòu),又分為一次性購(gòu)買和訂閱制再榄。一次性購(gòu)買容易理解狡刘;訂閱制可以有按月、季度困鸥、年等不同周期嗅蔬。對(duì)于訂閱制,又分為自動(dòng)續(xù)訂和手動(dòng)續(xù)訂疾就。目前澜术,蘋果對(duì)于訂閱制、尤其是自動(dòng)續(xù)訂的訂閱制猬腰,審核較嚴(yán)鸟废。

另外,還有 消耗型內(nèi)購(gòu)漆诽,這種在游戲中較為常見侮攀,比如花錢買裝備,或者為賬戶充值等厢拭。

對(duì)于內(nèi)購(gòu)的開發(fā)兰英,還是比較繁瑣的,比如要處理展示供鸠、購(gòu)買畦贸、用戶購(gòu)買后退款、恢復(fù)楞捂、訂閱續(xù)訂薄坏、訂閱未續(xù)訂導(dǎo)致過期等等邏輯。好在寨闹,我封裝了 IAPHelper胶坠,可以很方便地處理這些邏輯(如下代碼為購(gòu)買部分);開源繁堡,可以 Pod 方式集成沈善,已經(jīng)在我的產(chǎn)品中應(yīng)用多年,大家可放心使用椭蹄。

 IAP.purchaseProduct(productIdentifier, handler: { (productIdentifier, error) in
    if let identifier = productIdentifier {
        // The product of 'productIdentifier' purchased.
         
    } else if let error = error as? NSError {
      if error.code == SKError.Code.paymentCancelled.rawValue {
        // User cancelled
        
      } else {
        // Some error happened
      }
    }
})

7.3) 不完美的 MAS

之前蘋果與微信怒懟的打賞分成事件闻牡,想必讓更多朋友知道了:凡是應(yīng)用從用戶收到的錢,蘋果均要收 30% 的拔毛費(fèi)绳矩。

MAS 的諸多限制罩润,以及不菲的拔毛費(fèi),讓很多知名的 macOS App 紛紛下架翼馆,如 Sketch割以、Dash 等等金度。

不過,要在 MAS 之外發(fā)布拳球,還是要做很多事情的审姓,比如下載、支付祝峻、退款、激活碼等等扎筒。對(duì)于小程序莱找,還是挺繁瑣的,并不劃算嗜桌。另外奥溺,畢竟 MAS 還能帶來一些自然流量。

如果在 MAS 之外發(fā)布骨宠,還有一點(diǎn)需要注意:.app 程序本質(zhì)上是一個(gè)文件夾浮定。如果需要在網(wǎng)絡(luò)上傳送(如作為郵件的附件),最好是進(jìn)行壓縮层亿,甚至是制作 .dmg 文件桦卒,我使用的是 create-dmg 這個(gè)小工具,非常方便匿又,生成的樣式也簡(jiǎn)單大方方灾。

基于上面的原因,目前我的應(yīng)用全部在 MAS 上發(fā)布碌更,尚未在 MAS 之外發(fā)布裕偿。

尾巴

macOS 開發(fā)的話題還有非常多,比如 Storyboard痛单、綁定嘿棘、動(dòng)畫、并發(fā)旭绒、Undo鸟妙、Pasteboard、Drag & Drop快压、本地化圆仔、單元測(cè)試等等,本文不可能全部提及蔫劣。并且坪郭,寫起來也好累,畢竟必須對(duì)這些點(diǎn)有完全的掌握脉幢,才可能寫出來歪沃。暫且挖坑嗦锐,以后再填,詳見個(gè)人公眾號(hào)「自在開發(fā)

對(duì) macOS 開發(fā)感興趣沪曙?歡迎留言交流奕污。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市液走,隨后出現(xiàn)的幾起案子碳默,更是在濱河造成了極大的恐慌,老刑警劉巖缘眶,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘱根,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡巷懈,警方通過查閱死者的電腦和手機(jī)该抒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顶燕,“玉大人凑保,你說我怎么就攤上這事∮抗ィ” “怎么了欧引?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)癣漆。 經(jīng)常有香客問我维咸,道長(zhǎng),這世上最難降的妖魔是什么惠爽? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任癌蓖,我火速辦了婚禮,結(jié)果婚禮上婚肆,老公的妹妹穿的比我還像新娘租副。我一直安慰自己,他們只是感情好较性,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布用僧。 她就那樣靜靜地躺著,像睡著了一般赞咙。 火紅的嫁衣襯著肌膚如雪责循。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天攀操,我揣著相機(jī)與錄音院仿,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛歹垫,可吹牛的內(nèi)容都是我干的剥汤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼排惨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼吭敢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暮芭,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鹿驼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谴麦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蠢沿,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年匾效,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恤磷。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡面哼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扫步,到底是詐尸還是另有隱情魔策,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布河胎,位于F島的核電站闯袒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏游岳。R本人自食惡果不足惜政敢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胚迫。 院中可真熱鬧喷户,春花似錦、人聲如沸访锻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽期犬。三九已至河哑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間龟虎,已是汗流浹背璃谨。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遣总,地道東北人睬罗。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓轨功,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親容达。 傳聞我的和親對(duì)象是個(gè)殘疾皇子古涧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件花盐、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,121評(píng)論 4 61
  • 該組字母是一組常用英語單詞的第二個(gè)字母羡滑,你能推算出下一個(gè)字母是什么嗎?N W H O I I ? 答案:前6個(gè)字母...
    博格體閱讀 750評(píng)論 0 0
  • 7:47 當(dāng)我老了,我想擁有一頭卷發(fā)算芯,打一把黃色小傘去逛街 出小區(qū)門口的時(shí)候柒昏,迎面走來一對(duì)老夫婦,看奶奶短短的灰...
    開始周更的開魯閱讀 227評(píng)論 0 0
  • 一早忙碌著自習(xí),忙碌著檢查孩子們背誦届囚,一本一本默寫有梆,一個(gè)一個(gè)可愛的孩子們,他們積極投入的樣子意系,給了我一早的滿滿當(dāng)當(dāng)...
    時(shí)慧慧愛物閱讀 357評(píng)論 0 2