內(nèi)存管理

ARC 處理原理

  • arc 是oc 編譯器的特性,而不是運(yùn)行時特性或者垃圾回收機(jī)制,ARC 所做的只不過是在代碼編譯階段為你自動在合適的位置插入 release 或 autorelease螃成,只要沒有強(qiáng)指針指向?qū)ο蟊毕罚瑢泳蜁尫拧?/li>
  • 前端編譯器
    • 前端編譯器會為“擁有的”每一個對象插入一個 release 語句尿赚。如果對象的所有權(quán)修飾符是__strong督惰,那么它就是被擁有的。如果在某個方法內(nèi)創(chuàng)建一個對象茴厉,前端編譯器會在方法末尾自動插入 release 語言可以銷毀他泽台。而類擁有的對象(實(shí)例變量、屬性)會在 dealloc 方法內(nèi)被釋放矾缓。此外怀酷,由編譯器生成的代碼甚至?xí)茸约簩懙?release 語言的性能還要好,因?yàn)榫幾g器可以做出一些假設(shè)而账。在 ARC 中胰坟,沒有類可以覆蓋 release 方法,也沒有調(diào)用他的必要。ARC 會通過直接調(diào)用 objc_release 來優(yōu)化調(diào)用過程笔横。而對于 retain 也是同樣的方法竞滓。ARC 會調(diào)用 objc_retain 來取代保留消息。
  • ARC 優(yōu)化器
    • 雖然前端編譯器聽起來很厲害的樣子吹缔,但代碼證有時仍會出現(xiàn)幾個對 retain 和 release 的重復(fù)調(diào)用商佑。ARC 優(yōu)化器負(fù)責(zé)移除多余的 retain 和 release 語句,確保生成的代碼運(yùn)行速度高于手動引用計數(shù)的代碼厢塘。

下面對 oc 內(nèi)存管理描述錯誤的是茶没?

  • A. 當(dāng)使用 ARC 類管理內(nèi)存時,代碼中不可以出現(xiàn) autorelease
  • B. autoreleasepool 在 drain 的時候會釋放在其中分配的對象
  • C. 當(dāng)使用 ARC 來管理內(nèi)存的時晚碾,在線程中大量分配對象而不用 autoreleasepool 則可能會造成內(nèi)存泄漏
  • D. 在使用 ARC 的項(xiàng)目中不能使用 NSZone
    • A抓半。理由:ARC 只是在大多時候編譯器自動為我們添加上內(nèi)存管理的代碼,只是我們的源代碼看不到而已格嘁,但是在編譯時笛求,編譯器會添加上相關(guān)的內(nèi)存管理代碼。對于自動釋放池糕簿,在 drain 時會講自動釋放池中所有對象的引用計數(shù)減一探入,若引用計數(shù)為0,則會自動釋放掉其內(nèi)存懂诗。如果在線程中需要大量的分配內(nèi)存蜂嗽,我們理應(yīng)添加上自動釋放池,以防內(nèi)存泄漏殃恒。比如在 for 循環(huán)中要分配大量的內(nèi)存處理數(shù)據(jù)植旧,那么我們應(yīng)該在 for 循環(huán)內(nèi)添加自動釋放池,在每個循環(huán)后就講內(nèi)存釋放掉芋类,防止內(nèi)存泄漏隆嗅。在 ARC 項(xiàng)目中界阁,自然不能手動使用 NSZone侯繁,也不能調(diào)用父類的 dealloc。

MRC 文件和 ARC 工程混合編程時泡躯,需要在文件的 compiler Flags 上添加參數(shù) -fno-objc-arc

什么情況下使用 weak 關(guān)鍵字贮竟,相比 assign 有什么不同?

  • 在 ARC 中较剃,有可能出現(xiàn)循環(huán)引用的時候咕别,往往通過讓其中一端使用 weak 來解決,比如 delegate 代理屬性写穴。自身已經(jīng)對它進(jìn)行一次強(qiáng)引用惰拱,沒有必要再強(qiáng)引用一次,此時也會使用 weak啊送,自定義 IBOutlet 控件屬性一般也使用 weak偿短,當(dāng)然欣孤,也可以是 strong。
  • weak 此特性表明該屬性定義一種“非擁有關(guān)系”昔逗。為這種屬性設(shè)置新值時降传,設(shè)置方法既不保留新值,也不釋放舊值勾怒。此特性同 assign 的設(shè)置方法只會執(zhí)行純量類型的簡單賦值操作婆排。
  • assign 可以用于非 oc 對象,而 weak 必須使用 oc 對象笔链。

調(diào)用對象的 release 方法會銷毀對象嗎段只?

  • 不會,調(diào)用 release 方法只是將對象的引用計數(shù)器-1鉴扫,當(dāng)對象的引用計數(shù)器為0的時候會調(diào)用了對象的 dealloc 方法才能進(jìn)行釋放對象內(nèi)存翼悴。

自動釋放池常見代碼

for (int i = 0; i <  someLargeNumber; ++i){
    NSString *string = @"abc";
    string = [string lowercaseString];
    string = [string stringByAppendingString:@"xyz"];
    NSLog(@"%@", string);
}
  • 上面代碼存在問題:問題處在每執(zhí)行一次循環(huán),就會有一個 string 加到當(dāng)前runloop 中的自動釋放池中幔妨,只有當(dāng)自動釋放池被 release 的時候鹦赎,自動釋放池中的標(biāo)示了 autorelease 的這些數(shù)據(jù)所占用的內(nèi)存空間才能被釋放掉。假設(shè)误堡,當(dāng)someLargeNumber 大道一定程度的時候古话,內(nèi)存空間將被耗盡而沒有釋放掉,所以就出現(xiàn)內(nèi)存溢出的現(xiàn)象锁施。
  • 解決辦法1:如果 i 比較大陪踩,可以用@autoreleasepool{}解決,放在 for 循環(huán)結(jié)束后悉抵,銷毀對象肩狂,解決占據(jù)棧區(qū)內(nèi)存問題
  • 解決方案2:如果 i 玩命大,一次循環(huán)都會造成自動釋放池被填滿姥饰,自動釋放池房子 for 循環(huán)內(nèi)傻谁,每次循環(huán)都將上一次創(chuàng)建的對象 release
for (int i = 0; i < 1000; ++i) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    string = [string lowercaseString];
    string = [string stringByAppendingString:@"xyz"];
    NSLog(@"%@", string);
    //釋放池
    [pool drain];
}

OC 對象的內(nèi)存布局是怎樣的?

  • 由于 oc 中沒有多繼承列粪,因此其內(nèi)存布局還是很簡單的审磁,就是最前面有一個 isa 指針,然后父類的實(shí)例變量存放在子類的成員變量之前岂座。

看下面的程序态蒂,第一個 NSLog 會輸出什么?這時 str 的 retainCount 是多少费什?第二個和第三個呢钾恢?為什么?

NSMutableArray *array = [[NSMutableArray array] retain];
NSString *str = [NSString stringWtihFormat:@"test"];
[str retain];
[array addObject:str];
NSLog(@"%@%d", str, [str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@%d", str, [str retainCount]);
[array removeAllObjects];
NSLog(@"%@%d", str, [str retainCount]);

str 的 retainCount 創(chuàng)建+1,retain+1瘩蚪,進(jìn)入數(shù)字自動+1 -> 3
retain+1, release-1, release-1 -> 2
數(shù)組刪除所有對象刑桑,所有數(shù)組內(nèi)的對象自動-1 ->1

回答 person 的 retainCount 值,為什么募舟?

Person *person = [[Person alloc] init];
self.person = person;

創(chuàng)建的時候 person 的 retainCount 是1
在 self.person 時祠斧,如果是 assgin,person 的retainCount 不變,仍為1拱礁,若是 retain person 的 retainCount 的值加1琢锋,變?yōu)?
若是 copy person 的 retainCount 值不便,仍為1

什么時候需要在程序中創(chuàng)建內(nèi)存池呢灶?

  • 用戶自己創(chuàng)建的數(shù)據(jù)線程吴超,則需要創(chuàng)建該線程的內(nèi)存池。

如果我們不創(chuàng)建內(nèi)存池鸯乃,是否有內(nèi)存池提供給我們鲸阻?

  • 界面線程維護(hù)著自己的內(nèi)存池,用戶自己創(chuàng)建的數(shù)據(jù)線程缨睡,則需要改線程的內(nèi)存池鸟悴。

蘋果是如何實(shí)現(xiàn) autoreleasepool 的?

  • autoreleasepool 以一個隊列的形式實(shí)現(xiàn)奖年,主要通過下列3個函數(shù)完成
    • objc_autoreleasepoolPush
    • objc_autoreleasepoolPop
    • objc_autorelease
  • 看函數(shù)名就可以知道细诸,對 autorelease 分別執(zhí)行 push 和 pop 操作。銷毀對象時執(zhí)行 release 操作陋守。

objc 使用什么機(jī)制管理對象內(nèi)存震贵?

  • 通過引用計數(shù)器(retainCount)的機(jī)制來決定對象是否要被釋放。每次 runloop 完成一次循環(huán)的時候水评,都會檢查對象的 retainCount猩系,如果 retainCount 為0,說明該對象沒有地方需要繼續(xù)使用了中燥,可以釋放掉了寇甸。

為什么要進(jìn)行內(nèi)存管理?

  • 因?yàn)橐苿釉O(shè)備的內(nèi)存極其有限褪那,當(dāng)一個程序所占內(nèi)存達(dá)到一定值時幽纷,系統(tǒng)會發(fā)出內(nèi)存警告。當(dāng)程序達(dá)到更大的值時博敬,程序會閃退,影響用戶體驗(yàn)峰尝,為了保證程序的運(yùn)行流程偏窝,必須進(jìn)行內(nèi)存管理。

內(nèi)存管理范圍

  • 管理所有繼承自 NSObject的對象,對基本數(shù)據(jù)類型無效祭往。是因?yàn)閷ο蠛推渌麛?shù)據(jù)類型在系統(tǒng)中的存儲空間不一樣伦意,其他局部變量主要存儲在棧區(qū)(因?yàn)榛緮?shù)據(jù)類型占用的存儲空間是固定的,一般放于棧區(qū))硼补。而對象存儲在堆中驮肉,當(dāng)代碼塊結(jié)束時,這個代碼塊所涉及到的所有局部變量都會自動彈棧清空已骇,指向?qū)ο蟮闹羔樢矔换厥绽攵郏@時對象就沒有指針指向,但依然存在堆內(nèi)存中褪储,造成內(nèi)存泄漏卵渴。

objc 使用什么機(jī)制管理對象內(nèi)存(或者內(nèi)存管理方式有哪些?)

  • MRC(manual retain-release) 手動內(nèi)存管理
  • ARC(automatic reference counting)自動引用計數(shù)
  • 垃圾回收(Garbage collection)鲤竹。但是 iOS 不支持垃圾回收浪读,ARC 作為 LLVM3.0編譯器的一項(xiàng)特性,在 iOS5.0(xcode4)版本后推出辛藻。
  • ARC 的判斷準(zhǔn)則碘橘,只要沒有強(qiáng)指針指向?qū)ο螅瑢ο缶蜁会尫拧?/li>

內(nèi)存管理原則

  • 只要還有人在使用這個對象吱肌,那么這個對象就不會被回收蛹屿。
  • 只有你想使用這個對象,那么就應(yīng)該讓這個對象的引用計數(shù)加1
  • 當(dāng)你不想使用這個對象岩榆,應(yīng)該讓這個對象引用計數(shù)器減1
  • 誰創(chuàng)建由誰來 release错负。如果通過 alloc、new勇边、copy 來創(chuàng)建一個對象犹撒,當(dāng)你不想使用這個對象的時候必須要調(diào)用 release或者 autorelease 讓引用計數(shù)減1。不是你創(chuàng)建的就不用你負(fù)責(zé) release粒褒。
  • 誰 retain 誰 release识颊。只要你調(diào)用了 retain,無論這個對象如何生成奕坟,都需要調(diào)用 release祥款。
  • 總結(jié):有加就應(yīng)該有減,曾讓某個對象計數(shù)器加1月杉,就應(yīng)該讓其在最后減1

內(nèi)存管理研究的對象

  • 野指針:指針變量沒有進(jìn)行初始化或者指向的空間已經(jīng)被釋放刃跛。
    • 使用野指針調(diào)用對象方法,會報異常苛萎,程序崩潰桨昙。
    • 通常再掉完 release 方法后检号,把保存對象指針的地址清空,賦值為nil蛙酪,找 oc 中沒有空指針異常齐苛,所以[nil retain];調(diào)用方法不會有異常。
  • 內(nèi)存泄漏
    • 如 Person *person = [Person new];(對象提前賦值 nil 或者被清空)在棧區(qū)的 person 已經(jīng)被釋放了桂塞,而堆區(qū) new 產(chǎn)生的對象還沒有釋放凹蜂,就會造成內(nèi)存泄漏。
    • MRC 引用計數(shù)器模式下阁危,造成內(nèi)存泄漏玛痊。1.沒有配對釋放,不符合內(nèi)存管理原則欲芹。2.對象提前賦值 nil 或者清空卿啡,導(dǎo)致 release 不起作用。
  • 僵尸對象:堆中已經(jīng)被釋放的對象(retainCount = 0)
  • 空指針:指的是賦值為空菱父。nil

如何判斷一個對象已經(jīng)被銷毀了

  • 重寫 dealloc 方法颈娜,對象銷毀時,會調(diào)用浙宜,重寫一定要[super dealloc] retainCount=0官辽,使用 retain 能否復(fù)活對象
  • 已經(jīng)釋放的對象無法復(fù)活

對象與對象之間存在的關(guān)系

  • 繼承關(guān)系
  • 組合關(guān)系(是一種強(qiáng)烈包含關(guān)系)
  • 依賴關(guān)系(對象作為方法參數(shù)傳遞)

對象的組合關(guān)系中,確保成員變量不被提前釋放粟瞬?

  • 重寫 set 方法同仆,在 set 方法中,retain 該對象裙品。

成員變量對象俗批,在哪里配對釋放

  • dealloc 中

對象組合關(guān)系中,內(nèi)存泄漏有哪幾種情況市怎?

  • set 方法沒有 retain 該對象
  • 沒有 release 舊對象
  • 沒有判斷向 set 方法中傳入的是否為同一個對象

正確重寫 set 方法

  • 判斷是否為同一個對象
  • release 舊對象
  • retain 新對象

分別描述內(nèi)存管理的要點(diǎn)岁忘、autorelease、release区匠、NSAutoreleasePool干像?并說明 autorelease 是什么時候被 release 的?簡述什么時候由你釋放對象驰弄,什么時候不釋放麻汰?[NSAutoreleasePool release] 和 [NSAutoreleasePool drain]有什么區(qū)別?

  • 內(nèi)存管理要點(diǎn):oc 使用引用計數(shù)機(jī)制(retainCount)來管理內(nèi)存
  • 內(nèi)存每被引用一次戚篙,該內(nèi)存的引用計數(shù)加1五鲫,每被釋放一次減1
  • 當(dāng)引用計數(shù)為0的時候,調(diào)用該對象的 dealloc 方法已球,來徹底銷毀這個該對象臣镣。
  • alloc辅愿、allocWithZone智亮、new(帶初始化)時忆某,該對象的引用計數(shù)+1
  • retain:手動為該對象引用計數(shù)+1
  • copy:對象引用計數(shù)+1; 注意 copy 的 oc 數(shù)據(jù)類型是否有 mutable阔蛉,如有為深拷貝弃舒,新對象計數(shù)為1,如果沒有為淺拷貝状原,計數(shù)+1
  • mutableCopy:生成一個新對象聋呢,新對象引用計數(shù)為1
  • release:手動為該對象引用計數(shù)-1
  • autorelease:把該對象放入自動釋放池,當(dāng)自動釋放池釋放時颠区,其內(nèi)的對象引用計數(shù)-1
  • NSAutoreleasePool:NSAutoreleasePool 是通過接受對象向他發(fā)送的 autorelease 消息削锰,記錄該對象的 release 消息,當(dāng)自動釋放池被銷毀時毕莱,會自動向自動釋放中的對象發(fā)送 release 消息器贩。
  • autorelease 是在自動釋放池被銷毀,向池中的對象發(fā)送 release朋截,只能釋放自己擁有的對象蛹稍。
  • 區(qū)別是:在引用計數(shù)環(huán)境下(在不適用 ARC 情況下),兩者基本是一樣的部服,在 GC(垃圾回收機(jī)制)環(huán)境下唆姐,release 是一個 no-op(無效操作),所以無論是不是 GC 都使用 drain

自動釋放池是什么廓八,如何工作奉芦?

  • 什么是自動釋放池:用來存儲多個對象類型的指針變量
  • 自動釋放池對池內(nèi)對象的作用:存入池內(nèi)的對象,當(dāng)自動釋放池被毀掉時剧蹂,會對池內(nèi)對象全部做一次 release 操作声功。
  • 對象如何加入池中:調(diào)用對象的 autorelease 方法
  • 自動釋放池能嵌套嗎?:能
  • 自動釋放池何時被銷毀国夜?:簡單的看减噪,autorelease 的“}”執(zhí)行完成后。而實(shí)際情況是 autorelease 對象在當(dāng)前的 runloop 迭代結(jié)束時是否车吹,而它能夠釋放的原因是系統(tǒng)在每個 runloop 迭代中都加入了自動釋放池 push 和 pop
  • 多次調(diào)用對象的 autorelease 方法會導(dǎo)致野指針異常
  • 自動釋放池的作用:將對象和自動釋放池建立關(guān)系筹裕,池子內(nèi)調(diào)用 autorelease,在自動釋放池銷毀時銷毀對象窄驹,延遲 release 銷毀時朝卒。

自動釋放池什么時候釋放?

  • 通過 observer 監(jiān)聽 runloop 的狀態(tài)乐埠,一旦監(jiān)聽到 runloop 即將進(jìn)入睡眠等狀態(tài)抗斤,就釋放自動釋放池(kCFRunLoopBeforeWaiting)

iPhone OS 有沒有垃圾回收囚企?autorelease 和垃圾回收(GC)有什么關(guān)系?

  • iOS 中沒有垃圾回收瑞眼。autorelease 只是延遲釋放龙宏,gc 是每隔一段時間詢問程序,看是否有無指針指向的對象伤疙,若有银酗,就將它回收。他們兩者沒有關(guān)系徒像。

ARC 問題

  • 什么是 ARC 機(jī)制:自動引用計數(shù)
  • 系統(tǒng)判定對象是否被銷毀的依據(jù):指向?qū)ο蟮膹?qiáng)指針是否被銷毀
  • ARC 的本質(zhì):對 retainCount 計算黍特,創(chuàng)建+1,清空指針-1或者達(dá)到 autorelease 的大括號-1
  • ARC 的目的:不需要程序員關(guān)心 retain 和 release 操作
  • 如何解決 ARC 機(jī)制下類的相互引用:.h 文件中使用@class 關(guān)鍵字聲明一個類锯蛀,兩端不能都用強(qiáng)指針灭衷,一端用 strong 一端用 weak

ARC 通過什么方式幫助開發(fā)者管理內(nèi)存?

  • ARC 相對于 MRC旁涤,不是在編譯時添加 retain翔曲、release、autorelease 這么簡單拭抬。應(yīng)該是編譯期和運(yùn)行期兩部分共同幫助開發(fā)者管理內(nèi)存部默。
    • 在編譯期,ARC 用的是更底層的 C 接口實(shí)現(xiàn)的 retain造虎、release傅蹂、autorelease,這樣做性能更好算凿,也是為什么不能在 ARC 環(huán)境下手動 retain份蝴、release、autorelease氓轰,同時對同一上下文的同一對象的 retain婚夫、release、autorelease 操作進(jìn)行優(yōu)化(即忽略不必要的操作)
    • ARC 也包含運(yùn)行期組件署鸡,這個地方做的優(yōu)化比較復(fù)雜案糙,但也不能被忽略,手動去做未比優(yōu)化得好靴庆,因此直接交給編譯器來優(yōu)化时捌。

開發(fā)項(xiàng)目時你是怎么檢查內(nèi)存泄漏

  • 靜態(tài)分析 analyze
  • instruments 工具里面有一個 leak 可以動態(tài)分析。如果在 block 中多次使用 weakself 的話炉抒,可以在 block 中先使用 strongself奢讨,防止 block 運(yùn)行時 weakself被意外釋放
  • 對于 MRC,講 weak 改為 block 即可焰薄。

設(shè)計一個簡單的圖片內(nèi)存緩存器(移除策略是一定要說)

  • 內(nèi)存緩存是個通用話題拿诸,每個平臺都會用到扒袖。ceche 算法會影響到整個 app 的表現(xiàn)。了解 cache 策略及其各自的特點(diǎn)亩码。
  • 常見的有 FIFO季率、LRU、LFU 等等蟀伸。由于 NSCache 的緩存策略不透明蚀同,一些 App 開發(fā)者會選擇自己做一套 cache 機(jī)制缅刽,其實(shí)并不難啊掏。
  • FIFO:新訪問的數(shù)據(jù)插入 FIFO 隊列尾部,數(shù)據(jù)在 FIFO 隊列中順序移動衰猛;淘汰 FIFO 隊列頭部的數(shù)據(jù)
  • LRU:新數(shù)據(jù)插入到鏈表頭部迟蜜,每當(dāng)緩存數(shù)據(jù)命中,則將數(shù)據(jù)遷移到鏈表頭部啡省;當(dāng)鏈表滿的時候娜睛,將鏈表尾部的數(shù)據(jù)丟棄。
  • LFU:新加入數(shù)據(jù)插入到隊列尾部(因?yàn)橐糜嫈?shù)為1)卦睹;隊列中的數(shù)據(jù)被訪問后畦戒,引用計數(shù)增加,隊列重新排序结序;當(dāng)需要淘汰數(shù)據(jù)的時候障斋,將已經(jīng)排序的列表最后的數(shù)據(jù)塊刪除;

常見的出現(xiàn)內(nèi)存循環(huán)引用的場景有哪些徐鹤?

  • 定時器(NSTimer):NSTimer 經(jīng)常會被作為某個類的成員變量垃环,而 NSTimer 初始化時,要指定 self 為 target返敬,容易造成循環(huán)引用(self->timer->self)遂庄。另外,若 timer 一直處于 validate 的狀態(tài)劲赠,則其引用計數(shù)將始終大于0涛目,因此不再使用定時器以后,應(yīng)該先調(diào)用 invalidate 方法
  • block 的使用:block 在 copy 時都會對 block 內(nèi)部用到的對象進(jìn)項(xiàng)強(qiáng)引用(ARC)或者 retainCount 加1(非 ARC)凛澎。在 ARC 與 MRC 環(huán)境下對 block 使用不當(dāng)會引起循環(huán)引用問題霹肝,一般表現(xiàn)為,某個類將 block 作為自己的屬性變量预厌,然后該類在 block 的方法體里面又使用了該類本身阿迈,簡單的說就是 self.someBlock=Type var{[self dosomething]};或者 self.otherVar = XXX;或者_(dá)otherVar=...};出現(xiàn)循環(huán)引用問題是:self->block-self 或者 self->block->_ivar(成員變量)
  • 代理(delegate):在委托問題上出現(xiàn)循環(huán)問題已經(jīng)是老生常談了,規(guī)避該問題就是在的時候聲明 delegate 是用 assgin(MRC)或者 weak(ARC)

對象添加到通知中心中轧叽,當(dāng)通知中心發(fā)送通知時苗沧,這個對象已經(jīng)被釋放了刊棕,可能會出現(xiàn)什么問題?

  • 其實(shí)這種只是考查對通知的簡單應(yīng)用待逞。通知時一堆多的關(guān)系甥角,主要使用場景是跨模塊傳值。當(dāng)某個對象加入通知中心后识樱,若在對象被銷毀前不將該對象從通知中心移除嗤无,當(dāng)發(fā)送通知時绽昼,就會造成崩潰坦报。這是很常見的。所以在添加到通知中心后瑟捣,一定要在釋放前移除割疾。

ARC 下不顯示指定任何屬性關(guān)鍵時嚎卫,默認(rèn)的關(guān)鍵字都有哪些?

  • 對于基本類型默認(rèn)關(guān)鍵字是:atomic宏榕,readwrite拓诸,assign
  • 對于 oc 對象,atomic麻昼,readwrite奠支,strong
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抚芦,隨后出現(xiàn)的幾起案子倍谜,更是在濱河造成了極大的恐慌,老刑警劉巖燕垃,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枢劝,死亡現(xiàn)場離奇詭異,居然都是意外死亡卜壕,警方通過查閱死者的電腦和手機(jī)您旁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轴捎,“玉大人鹤盒,你說我怎么就攤上這事≌旄保” “怎么了侦锯?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長秦驯。 經(jīng)常有香客問我尺碰,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任亲桥,我火速辦了婚禮洛心,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘题篷。我一直安慰自己词身,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布番枚。 她就那樣靜靜地躺著法严,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葫笼。 梳的紋絲不亂的頭發(fā)上深啤,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機(jī)與錄音渔欢,去河邊找鬼墓塌。 笑死,一個胖子當(dāng)著我的面吹牛奥额,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播访诱,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼垫挨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了触菜?” 一聲冷哼從身側(cè)響起九榔,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涡相,沒想到半個月后哲泊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡催蝗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年切威,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丙号。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡先朦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出犬缨,到底是詐尸還是另有隱情喳魏,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布怀薛,位于F島的核電站刺彩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜创倔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一三热、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧三幻,春花似錦就漾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朗徊,卻和暖如春首妖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爷恳。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工有缆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人温亲。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓棚壁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親栈虚。 傳聞我的和親對象是個殘疾皇子袖外,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

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

  • 內(nèi)存管理 簡述OC中內(nèi)存管理機(jī)制。與retain配對使用的方法是dealloc還是release魂务,為什么曼验?需要與a...
    丶逐漸閱讀 1,974評論 1 16
  • 29.理解引用計數(shù) Objective-C語言使用引用計數(shù)來管理內(nèi)存,也就是說粘姜,每個對象都有個可以遞增或遞減的計數(shù)...
    Code_Ninja閱讀 1,498評論 1 3
  • iOS內(nèi)存管理 概述 什么是內(nèi)存管理 應(yīng)用程序內(nèi)存管理是在程序運(yùn)行時分配內(nèi)存(比如創(chuàng)建一個對象,會增加內(nèi)存占用)與...
    蚊香醬閱讀 5,730評論 8 119
  • 內(nèi)存管理是程序在運(yùn)行時分配內(nèi)存鬓照、使用內(nèi)存,并在程序完成時釋放內(nèi)存的過程孤紧。在Objective-C中豺裆,也被看作是在眾...
    蹲瓜閱讀 3,112評論 1 8
  • 比特幣是2017年最大的熱點(diǎn) 我也想在這里談?wù)勎覍ω泿诺恼J(rèn)識留储。 發(fā)行方: 比特幣由礦工發(fā)行,作為去中心化的貨幣咙轩,現(xiàn)...
    白手起家?guī)湃ι裨?/span>閱讀 346評論 0 0