iOS程序執(zhí)行順序 AppDelegate及 UIViewController 的生命周期(轉(zhuǎn)自https://www.cnblogs.com/junhuawang/p/5742535.html)

iOS程序執(zhí)行順序 AppDelegate及 UIViewController 的生命周期

iOS程序的啟動(dòng)執(zhí)行順序 AppDelegate 及 UIViewController 的生命周期

iOS應(yīng)用程序的狀態(tài)切換很重要,而UIViewControler對(duì)于iOS這種MVC模式來說尤為重要,基本都要繼承自他深碱。

一妹笆、iOS程序的啟動(dòng)執(zhí)行順序

1 程序的入口

進(jìn)入main函數(shù), 設(shè)置AppDelegate稱為函數(shù)的代理

2 程序完成加載

-[AppDelegate application:didFinishLaunchingWithOptions:]

3 創(chuàng)建window窗口

4 程序被激活

-[AppDelegate applicationDidBecomeActive:]

5 當(dāng)點(diǎn)擊command+H時(shí)

程序取消激活狀態(tài)

-[AppDelegate applicationWillResignActive:]

程序進(jìn)入后臺(tái)

-[AppDelegate applicationDidEnterBackground:]

6 點(diǎn)擊進(jìn)入工程

程序進(jìn)入前臺(tái)

-[AppDelegate applicationWillEnterForeground:]

程序被激活

-[AppDelegate applicationDidBecomeActive:]

1器虾、對(duì)于applicationWillResignActive(非活動(dòng))與applicationDidEnterBackground(后臺(tái))這兩個(gè)的區(qū)別阱飘。

1)applicationWillResignActive(非活動(dòng)):

比如當(dāng)有電話進(jìn)來或短信進(jìn)來,在或者鎖屏等针史,這時(shí)你的應(yīng)用程序掛起進(jìn)入非活動(dòng)狀態(tài)贡定,也就是你的手機(jī)其實(shí)界面還是顯示著你當(dāng)前的App窗口赋访,只不過被別的任務(wù)強(qiáng)制占用了,或者后臺(tái)狀態(tài)(因?yàn)橐冗M(jìn)入非活動(dòng)狀態(tài)缓待,然后進(jìn)入后臺(tái))蚓耽。

 (2)applicationDidEnterBackground(后臺(tái))

指當(dāng)前窗口不是你的App旋炒,大多數(shù)程序進(jìn)入這個(gè)后臺(tái)后會(huì)在在這個(gè)狀態(tài)上停留一會(huì)步悠,時(shí)間到之后會(huì)進(jìn)入掛起狀態(tài)(Suspended)。如果你程序特殊處理后可以長期處于后臺(tái)狀態(tài)即在后臺(tái)狀態(tài)也可以運(yùn)行瘫镇。Suspended(掛起):程序在后臺(tái)不能執(zhí)行代碼鼎兽。系統(tǒng)會(huì)自動(dòng)把程序變成這個(gè)狀態(tài)而且不會(huì)發(fā)出通知。當(dāng)掛起時(shí)铣除,程序還是停留在內(nèi)存中的谚咬,當(dāng)系統(tǒng)內(nèi)存低時(shí),系統(tǒng)就把掛起的程序清除掉尚粘,為前臺(tái)程序提供更多的內(nèi)存择卦。

看下面流程圖:

image

這個(gè)圖特別重要,說明了所有的切換狀態(tài)背苦。

image

入口函數(shù):

<pre style="margin: 0px; padding: 0px; overflow: auto; word-wrap: break-word; white-space: pre-wrap; font-family: "Courier New" !important; font-size: 12px !important;">int main(int argc, char * argv[]) { @autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([XYZAppDelegate class]));
} }</pre>

2.UIApplicationMain 函數(shù)解釋

官方解釋

// If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no // NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init. UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

翻譯過來之后(參數(shù)的解釋)

1.argcargv參數(shù)是為了與C語言保持一致互捌,在這沒用到,不詳述行剂。

2.后面兩個(gè)參數(shù)為principalClassName(主要類名)和delegateClassName(委托類名)

(1)如果principalClassName是nil钳降,那么它的值將從Info.plist中獲取厚宰,如果Info.plist中沒有,則默認(rèn)為UIApplication。principalClass這個(gè)類除了管理整個(gè)程序的生命周期之外什么都不做铲觉,它只負(fù)責(zé)監(jiān)聽事件然后交給delegateClass去做澈蝙。

(2)delegateClass將在工程新建時(shí)實(shí)例化一個(gè)對(duì)象。NSStringFromClass([AppDelegate class]) //相當(dāng)于@"AppDelegate"

3.AppDelegate類實(shí)現(xiàn)文件

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOption{// Override point for customization after application launch.
    NSLog(@"didFinishLaunchingWithOptions");
    return YES;
    }

  • (void)applicationWillResignActive:(UIApplication )application { / 當(dāng)應(yīng)用程序從活動(dòng)狀態(tài)(active)變到非活動(dòng)狀態(tài)(inactive時(shí)被觸發(fā)調(diào)用撵幽, 這可能發(fā)生在一些臨時(shí)中斷下(例如:來電話灯荧、來短信)又或者程序退出時(shí),他會(huì)先過渡到后臺(tái)然后terminate 使用這方法去暫停正在進(jìn)行的任務(wù)盐杂,禁用計(jì)時(shí)器逗载,節(jié)流OpenGL ES 幀率。在游戲中應(yīng)該在這個(gè)方法里面暫停游戲链烈。 */
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    NSLog(@"WillResignActive");
    }

  • (void)applicationDidEnterBackground:(UIApplication )application { / 使用這種方法來釋放共享資源,保存用戶數(shù)據(jù),無效計(jì)時(shí)器,存儲(chǔ)足夠多的應(yīng)用程序狀態(tài)信息來恢復(fù)您的應(yīng)用程序的當(dāng)前狀態(tài),以防它終止丟失數(shù)據(jù)厉斟。 如果你的程序支持后臺(tái)運(yùn)行,那么當(dāng)用戶退出時(shí)不會(huì)調(diào)用applicationWillTerminate强衡。 */
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    NSLog(@"DidEnterBackground");
    }

  • (void)applicationWillEnterForeground:(UIApplication )application { / 先從后臺(tái)切換到非活動(dòng)狀態(tài)擦秽,然后進(jìn)入活動(dòng)狀態(tài)。 */
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    NSLog(@"WillEnterForeground");
    }

  • (void)applicationDidBecomeActive:(UIApplication )application { / 重啟所有的任務(wù)漩勤,不管是從非活動(dòng)狀態(tài)還是剛啟動(dòng)程序感挥,還是后臺(tái)狀態(tài)。 */
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    NSLog(@"DidBecomeActive");
    }

  • (void)applicationWillTerminate:(UIApplication )application { / 終止越败,game over */
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    NSLog(@"WillTerminate");
    }

下面給出打印就明白他們之間的交互先后順序了:

啟動(dòng)程序

2014-07-28 15:22:39.883 LifeCycle[3024:a0b] didFinishLaunchingWithOptions

2014-07-28 15:22:39.887 LifeCycle[3024:a0b] DidBecomeActive

按下Home鍵

2014-07-28 15:22:43.130 LifeCycle[3024:a0b] WillResignActive

2014-07-28 15:22:43.131 LifeCycle[3024:a0b] DidEnterBackground

重新點(diǎn)擊程序

2014-07-28 15:22:44.380 LifeCycle[3024:a0b] WillEnterForeground

2014-07-28 15:22:44.380 LifeCycle[3024:a0b] DidBecomeActive

分析:

1.application:didFinishLaunchingWithOptions:

程序首次已經(jīng)完成啟動(dòng)時(shí)執(zhí)行触幼,若直接啟動(dòng),launchOptions中沒有數(shù)據(jù)眉尸;否則域蜗,launchOptions將包含對(duì)應(yīng)方式的內(nèi)容(比如從微信中啟動(dòng)節(jié)奏大師--)。

2.applicationWillResignActive(非活動(dòng))

程序?qū)⒁ctive狀態(tài)時(shí)調(diào)用噪猾,比如按下Home鍵有電話信息進(jìn)來霉祸。之后程序?qū)⑦M(jìn)入后臺(tái)狀態(tài)。對(duì)應(yīng)的applicationWillEnterForeground這個(gè)方法用來

a袱蜡、暫停正在執(zhí)行的任務(wù)丝蹭;

b、禁止計(jì)時(shí)器坪蚁;

c奔穿、減少OpenGL ES幀率;

d敏晤、若為游戲應(yīng)暫停游戲贱田;

3.applicationDidEnterBackground(已經(jīng)進(jìn)入后臺(tái))

程序已經(jīng)進(jìn)入后臺(tái)時(shí)調(diào)用,對(duì)應(yīng)applicationDidBecomeActive(已經(jīng)變成前臺(tái))嘴脾,這個(gè)方法用來

a男摧、釋放共享資源蔬墩;

b、保存用戶數(shù)據(jù)(寫到硬盤)耗拓;

c拇颅、作廢計(jì)時(shí)器;

d乔询、保存足夠的程序狀態(tài)以便下次恢復(fù)樟插;

4.applicationWillEnterForeground(將進(jìn)入前臺(tái))

程序即將進(jìn)去前臺(tái)時(shí)調(diào)用,對(duì)應(yīng)applicationWillResignActive(將進(jìn)入后臺(tái))竿刁。這個(gè)方法用來

1.撤銷applicationWillResignActive中做的改變黄锤。

5.applicationDidBecomeActive(已經(jīng)進(jìn)入前臺(tái))

程序已經(jīng)變?yōu)锳ctive(前臺(tái))時(shí)調(diào)用。對(duì)應(yīng)applicationDidEnterBackground(已經(jīng)進(jìn)入后臺(tái))们妥。

1.若程序之前在后臺(tái)猜扮,在此方法內(nèi)刷新用戶界面。

6.applicationWillTerminate

程序即將退出時(shí)調(diào)用监婶。記得保存數(shù)據(jù)旅赢,如applicationDidEnterBackground方法一樣。

其實(shí)仔細(xì)看上面那個(gè)狀態(tài)圖和輸出打印惑惶,他說明了所有這些切換交互流程煮盼。

二、UIViewController的生命周期

//The designated initializer //這個(gè)UIViewController的指定初始化方法(其他的初始化方法最終要調(diào)用這個(gè)初始化方法); //如果連接了串聯(lián)圖storyBoard根本就不用管這貨

  • (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    NSLog(@"%s", FUNCTION);
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization
    }
    return self;
    }

//視圖控制器中的視圖加載完成带污,viewController自帶的view加載完成

  • (void)viewDidLoad {
    NSLog(@"%s", FUNCTION);
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    }

//出現(xiàn)內(nèi)存警告 //模擬內(nèi)存警告:點(diǎn)擊模擬器->hardware-> Simulate Memory Warning

  • (void)didReceiveMemoryWarning {
    NSLog(@"%s", FUNCTION);
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

//視圖將要出現(xiàn)

  • (void)viewWillAppear:(BOOL)animated {
    NSLog(@"%s", FUNCTION);
    [super viewWillAppear:animated];
    }

//視圖已經(jīng)出現(xiàn)

  • (void)viewDidAppear:(BOOL)animated {
    NSLog(@"%s", FUNCTION);
    [super viewDidAppear:animated];
    }

//視圖將要消失 //雙擊Home鍵,向上推出程序執(zhí)行該函數(shù)

  • (void)viewWillDisappear:(BOOL)animated {
    NSLog(@"%s", FUNCTION);
    [super viewWillDisappear:animated];
    }

//視圖已經(jīng)消失

  • (void)viewDidDisappear:(BOOL)animated {
    NSLog(@"%s", FUNCTION);
    [super viewDidDisappear:animated];
    }
    @end
    看打印輸出:

2015-01-03 17:39:03.973 LessonUIViewControler[791:41458] -[RootViewController initWithNibName:bundle:]

2015-01-03 17:39:03.976 LessonUIViewControler[791:41458] -[RootViewController viewDidLoad]

2015-01-03 17:39:03.976 LessonUIViewControler[791:41458] -[RootViewController viewWillAppear:]

2015-01-03 17:39:04.071 LessonUIViewControler[791:41458] -[RootViewController viewDidAppear:]

2015-01-03 17:39:11.630 LessonUIViewControler[791:41458] Received memory warning.

2015-01-03 17:39:11.631 LessonUIViewControler[791:41458] -[RootViewController didReceiveMemoryWarning]

2015-01-03 17:39:17.581 LessonUIViewControler[791:41458] -[RootViewController viewWillDisappear:]

2015-01-03 17:39:17.581 LessonUIViewControler[791:41458] -[RootViewController viewDidDisappear:]

當(dāng)一個(gè)視圖控制器被創(chuàng)建僵控,并在屏幕上顯示的時(shí)候。 代碼的執(zhí)行順序

1鱼冀、alloc 創(chuàng)建對(duì)象报破,分配空間;

2、init (initWithNibName) 初始化對(duì)象千绪,初始化數(shù)據(jù);

3充易、loadView 從nib載入視圖 ,通常這一步不需要去干涉荸型。除非你沒有使用xib文件創(chuàng)建視圖;

4盹靴、viewDidLoad 載入完成,可以進(jìn)行自定義數(shù)據(jù)以及動(dòng)態(tài)創(chuàng)建其他控件;

5瑞妇、viewWillAppear 視圖將出現(xiàn)在屏幕之前稿静,馬上這個(gè)視圖就會(huì)被展現(xiàn)在屏幕上了;

6、viewDidAppear 視圖已在屏幕上渲染完成 當(dāng)一個(gè)視圖被移除屏幕并且銷毀的時(shí)候的執(zhí)行順序辕狰,這個(gè)順序差不多和上面的相反;

1改备、viewWillDisappear

視圖將被從屏幕上移除之前執(zhí)行

2、viewDidDisappear

視圖已經(jīng)被從屏幕上移除蔓倍,用戶看不到這個(gè)視圖了

3绍妨、dealloc

視圖被銷毀润脸,此處需要對(duì)你在init和viewDidLoad中創(chuàng)建的對(duì)象進(jìn)行釋放 關(guān)于viewDidUnload :在發(fā)生內(nèi)存警告的時(shí)候如果本視圖不是當(dāng)前屏幕上

正在顯示的視圖的話柬脸,

viewDidUnload將會(huì)被執(zhí)行他去,本視圖的所有子視圖將被銷毀,以釋放內(nèi)存,此時(shí)開發(fā)者需要手動(dòng)對(duì)viewLoad倒堕、viewDidLoad中創(chuàng)建 的對(duì)象釋放內(nèi)存灾测。

因?yàn)楫?dāng)這個(gè)視圖再次顯示在屏幕上的時(shí)候,viewLoad垦巴、viewDidLoad 再次被調(diào)用媳搪,以便再次構(gòu)造視圖。 當(dāng)我們創(chuàng)建一個(gè)UIViewController類的對(duì)

象時(shí)骤宣,通常系統(tǒng)會(huì)生成幾個(gè)默認(rèn)的方法秦爆,這些方法大多與視圖的調(diào)用有關(guān),但是在視圖調(diào)用時(shí)憔披,這些方法的調(diào)用順序如何等限,需要整理下。 通常上

述方法包括如下幾種芬膝,這些方法都是UIViewController類的方法:

  • (void)viewDidLoad望门;

  • (void)viewDidUnload;

  • (void)viewWillAppear:(BOOL)animated锰霜;

  • (void)viewDidAppear:(BOOL)animated筹误;

  • (void)viewWillDisappear:(BOOL)animated;

  • (void)viewDidDisappear:(BOOL)animated癣缅;

下面介紹下APP在運(yùn)行時(shí)的調(diào)用順序厨剪。

1)- (void)viewDidLoad; 一個(gè)APP在載入時(shí)會(huì)先通過調(diào)用loadView方法或者載入IB中創(chuàng)建的初始界面的方法友存,將視圖載入到內(nèi)存中祷膳。然后會(huì)

調(diào)用viewDidLoad方法來進(jìn)行進(jìn)一步的設(shè)置。通常爬立,我們對(duì)于各種初始數(shù)據(jù)的載入钾唬,初始設(shè)定等很多內(nèi)容,都會(huì)在這個(gè)方法中實(shí)現(xiàn)侠驯,所以這個(gè)方法是

一個(gè)很常用抡秆,很重要的方法。

但是要注意吟策,這個(gè)方法只會(huì)在APP剛開始加載的時(shí)候調(diào)用一次儒士,以后都不會(huì)再調(diào)用它了,所以只能用來做初始設(shè)置檩坚。

    • (void)viewDidUnload;在內(nèi)存足夠的情況下着撩,軟件的視圖通常會(huì)一直保存在內(nèi)存中诅福,但是如果內(nèi)存不夠,一些沒有正在顯示的viewcontroller就

會(huì)收到內(nèi)存不夠的警告拖叙,然 后就會(huì)釋放自己擁有的視圖氓润,以達(dá)到釋放內(nèi)存的目的。但是系統(tǒng)只會(huì)釋放內(nèi)存薯鳍,并不會(huì)釋放對(duì)象的所有權(quán)咖气,所以通常我們

需要在這里將不需要在內(nèi)存中保留的對(duì)象釋 放所有權(quán),也就是將其指針置為nil挖滤。 這個(gè)方法通常并不會(huì)在視圖變換的時(shí)候被調(diào)用崩溪,而只會(huì)在系

統(tǒng)退出或者收到內(nèi)存警告的時(shí)候才會(huì)被調(diào)用。但是由于我們需要保證在收到內(nèi)存警告的時(shí)候能夠?qū)ζ渥鞒龇磻?yīng)斩松,所以這個(gè)方法通常我們都需要去實(shí)現(xiàn)伶唯。

另外,即使在設(shè)備上按了Home鍵之后惧盹,系統(tǒng)也不一定會(huì)調(diào)用這個(gè)方法乳幸,因?yàn)镮OS4之后,系統(tǒng)允許將APP在后臺(tái)掛起岭参,并將其繼續(xù)滯留在內(nèi)存中反惕,因此,

viewcontroller并不會(huì)調(diào)用這個(gè)方法來清除內(nèi)存演侯。

3)- (void)viewWillAppear:(BOOL)animated;系統(tǒng)在載入所有數(shù)據(jù)后姿染,將會(huì)在屏幕上顯示視圖,這時(shí)會(huì)先調(diào)用這個(gè)方法秒际。通常我們會(huì)利用這個(gè)方法悬赏,

對(duì)即將顯示的視圖做進(jìn)一步的設(shè)置。例如娄徊,我們可以利用這個(gè)方法來設(shè)置設(shè)備不同方向時(shí)該如何顯示闽颇。 另外一方面,當(dāng)APP有多個(gè)視圖時(shí)寄锐,在

視圖間切換時(shí)兵多,并不會(huì)再次載入viewDidLoad方法,所以如果在調(diào)入視圖時(shí)橄仆,需要對(duì)數(shù)據(jù)做更新剩膘,就只能在這個(gè)方法內(nèi)實(shí)現(xiàn)了。所以這個(gè)方法也非常常用盆顾。

    • (void)viewDidAppear:(BOOL)animated怠褐;

有時(shí)候,由于一些特殊的原因您宪,我們不能在viewWillApper方法里奈懒,對(duì)視圖進(jìn)行更新奠涌。那么可以重寫這個(gè)方法,在這里對(duì)正在顯示的視圖進(jìn)行進(jìn)一步的設(shè)置磷杏。

    • (void)viewWillDisappear:(BOOL)animated溜畅;

在視圖變換時(shí),當(dāng)前視圖在即將被移除茴丰、或者被覆蓋時(shí)达皿,會(huì)調(diào)用這個(gè)方法進(jìn)行一些善后的處理和設(shè)置。

由于在IOS4之后贿肩,系統(tǒng)允許將APP在后臺(tái)掛起,所以在按了Home鍵之后龄寞,系統(tǒng)并不會(huì)調(diào)用這個(gè)方法汰规,因?yàn)榫瓦@個(gè)APP本身而言,APP顯示的view物邑,仍是掛起時(shí)候

的view溜哮,所以并不會(huì)調(diào)用這個(gè)方法。

    • (void)viewDidDisappear:(BOOL)animated色解;

我們可以重寫這個(gè)方法茂嗓,對(duì)已經(jīng)消失,或者被覆蓋科阎,或者已經(jīng)隱藏了的視圖做一些其他操作述吸。 上述方法的流程圖可以簡(jiǎn)單用如下表示:

運(yùn)行APP —> 載入視圖 —> 調(diào)用viewDidLoad方法 —> 調(diào)用viewWillAppear方法 —> 調(diào)用viewDidAppear方法 —> 正常運(yùn)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锣笨,隨后出現(xiàn)的幾起案子蝌矛,更是在濱河造成了極大的恐慌,老刑警劉巖错英,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件入撒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡椭岩,警方通過查閱死者的電腦和手機(jī)茅逮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來判哥,“玉大人献雅,你說我怎么就攤上這事∫涛埃” “怎么了惩琉?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夺荒。 經(jīng)常有香客問我瞒渠,道長良蒸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任伍玖,我火速辦了婚禮嫩痰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窍箍。我一直安慰自己串纺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布椰棘。 她就那樣靜靜地躺著纺棺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邪狞。 梳的紋絲不亂的頭發(fā)上祷蝌,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音帆卓,去河邊找鬼巨朦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剑令,可吹牛的內(nèi)容都是我干的糊啡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吁津,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼棚蓄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腺毫,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤癣疟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后潮酒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睛挚,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年急黎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扎狱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勃教,死狀恐怖淤击,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情故源,我是刑警寧澤污抬,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響印机,放射性物質(zhì)發(fā)生泄漏矢腻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一射赛、第九天 我趴在偏房一處隱蔽的房頂上張望多柑。 院中可真熱鬧,春花似錦楣责、人聲如沸竣灌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽初嘹。三九已至,卻和暖如春蛔屹,著一層夾襖步出監(jiān)牢的瞬間削樊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工兔毒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甸箱。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓育叁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芍殖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子豪嗽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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