GeekBand~iOS~Objective-C~第二周

8.字符串處理

認識

->NSString是一個Unicode編碼癣丧、16位字符的字符序列汇四。
語法:NSString *someString = @"this is a string";
->NSString被定義為類类腮,引用類型,拷貝時具有引用語義猩谊。
編譯器遇到@并緊跟著包含在雙引號中的字符串就會創(chuàng)建一個靜態(tài)的包含所提供字符串的NSString對象揪罕。
->初始化方法:字面量初始化、初始化器吆鹤、工廠方法厨疙。
NSString *str1 = @"Hello World!"; NSString *str2 = [[NSString alloc]initWithCString:"Hello World!" encoding:NSUTF8StringEncoding]; NSString *str3 = [NSString stringWithCString:"Hello World!" encoding:NSUTF8StringEncoding]; NSString *str4= @"Hello World!";
->NSString擁有恒定性,所有的操作無法更改字符串本身疑务,如有更改沾凄,都是返回新值的形式梗醇。
NSLog(@"str1:%p",str1); NSLog(@"str2:%p",str2); NSLog(@"str3:%p",str3); NSLog(@"str4:%p",str4);
結(jié)果:

結(jié)果1.png

if( [str1 isEqualToString:str2]){ NSLog(@"str1 Value Equals str2"); }

    if(str1==str2){
        NSLog(@"str1 Ref Equals str2");
    }
    else{
        NSLog(@"str1 Ref Not Equals str2");
    }

    if(str1==str4){
        NSLog(@"str1 Ref Equals str4");
    }
    else{
        NSLog(@"str1 Ref Not Equals str4");
    }``

結(jié)果:

結(jié)果2.png

->NSString擁有共享機制,引用計數(shù)管理對其有特殊的管理規(guī)則撒蟀。

NSString內(nèi)存模型
NSString內(nèi)存模型.png
NSString共享機制
共享機制.png
NSMutableString

->NSMutableString具有可變性叙谨,NSString具有恒定性。
-> NSMutableString 為NSString的子類牙肝。
-> NSMutableString不具有在原有內(nèi)存上直接增長唉俗,而是重新分配一個更大或更小的緩存容量存放字符。
-> NSMutableString不具有共享機制配椭,NSString具有共享機制虫溜。

NSMutableString內(nèi)存機制
NSMutableString內(nèi)存機制.png
緩存容量與增長

->字符串初始化后,會分配一個緩存容量capacity股缸,其長度一般大于實際的字符數(shù)量衡楞。
->當字符串增長時,如果實際需求大于capacity敦姻,其capacity會以二倍的方式指數(shù)增長瘾境。伴隨的代價:
-->1.分配新的堆內(nèi)存 2*capacity
-->2.將原來堆內(nèi)存上的內(nèi)存拷貝到新內(nèi)存
-->3.釋放原來堆內(nèi)存
->最佳實踐,估計好capacity镰惦,預先分配好一定容量迷守,避免以后capacity的增長

NSString常用操作

->NSString
-->1.訪問字符串:獲取字符串字符、字符串長度旺入、字面量兑凿、大小寫轉(zhuǎn)換。
[str1 characterAtIndex:i]
str1 = str1.uppercaseString;//大寫 str1 = str1.lowercaseString;//小寫 str1 = str1.capitalizedString;//首字母大寫
-->2.查詢字符串:定位子串茵瘾、獲取子串礼华、是否包含子串、查詢字符集拗秘。
-->3.其他操作:比較字符串圣絮、替換字符串、分解字符串雕旨。
-> NSMutableString
-->添加字符串
-->刪除字符串
-->修改字符串
NSMutableString *mustr3 =[NSMutableString stringWithCapacity:100];

    [mustr3 appendString:@"Hello Objective"];
    
    [mustr3 insertString:@"-C" atIndex:mustr3.length];
    
    [mustr3 setString:@"Hi Objective"];
    
    NSRange replaceRange = NSMakeRange(0, 2);
    [mustr3 replaceCharactersInRange:replaceRange withString:@"Hello"];
    
    NSRange deleteRange = NSMakeRange(5, 10);
    [mustr3 deleteCharactersInRange:deleteRange];``

9.集合類型

集合類型 Collection Types

數(shù)組扮匠、Set、Dictionary

認識數(shù)組

->數(shù)組是一個有序的元素序列奸腺,支持隨機存取餐禁。索引從0開始,索引訪問越界會拋出運行時異常突照。注意與C語言數(shù)組不同。
NSArray *array1=[NSArray arrayWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil]; NSArray *array2=[[NSArray alloc] initWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil]; NSArray *array3=@[@"Shanghai",@"Beijing",@"New York",@"Paris"];
可以通過-count 方法訪問數(shù)組中元素的個數(shù)氧吐,返回一個NSInteger.
->NSArray被定義為class讹蘑,引用類型末盔,拷貝時具有引用語義。
->NSArray的元素必須是對象座慰,即NSObject的子類陨舱。
@interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>
-->1.如果為基本數(shù)值類型,須要用NSNumber 封裝為對象類型后版仔,才能放入數(shù)組中游盲。
NSInteger number=100; NSNumber *numberObject1= [NSNumber numberWithInteger:number ];
-->2.如果為C語言結(jié)構(gòu)類型,須要用NSValue 封裝為對象類型后蛮粮,才能放入數(shù)組中益缎。
NSValue *pointObject= [NSValue value:&point withObjCType:@encode(Point)];
-->3.數(shù)組元素可以是不同對象類型,可能會有類型不安全然想。
->NSArray具有常量性:長度和元素指針都不能更改莺奔。但指針指向的對象內(nèi)部可以更改。

數(shù)組內(nèi)存模型.png
常用操作

->數(shù)組遍歷
-->1.最快——Fast Enumeration变泄,直接訪問內(nèi)存令哟,優(yōu)化索引檢查,快5-10倍妨蛹。
for ( BLNPoint* point in array5) { point.x++; point.y++; }
-->2.較慢——NSEnumeration遍歷:索引檢查+動態(tài)消息調(diào)用屏富。
NSEnumerator *enumerator = [array5 objectEnumerator]; BLNPoint* item; while (item = [enumerator nextObject]) { item.x++; item.y++; }
-->3.最慢——For循環(huán)訪問:索引檢查+動態(tài)消息調(diào)用。
for (int i=0; i<array5.count; i++) { NSLog(@"array5[%d],%@",i,array5[i]); }

->數(shù)組查找
-->indexOfObject 查找是否存在“值相等”的對象(類型需要實現(xiàn)isEqual)蛙卤。
NSUInteger index1=[array5 indexOfObject:target];
-->indexOfObjectIdenticalTo 查找是否存在“指針想等”的對象狠半。
NSUInteger index2=[array5 indexOfObjectIdenticalTo:p3];

-objectAtIndex:方法訪問數(shù)組中的單個元素,返回給定索引處的單個元素表窘。
-lastObject:方法返回數(shù)組的最后一個元素典予。
->數(shù)組排序
-->不改變原數(shù)組(常量性),返回新數(shù)組乐严。
NSArray* sortArray1=[array1 sortedArrayUsingSelector:@selector(compare:)];

使用NSMutableArray

->NSMutableArray 支持更改數(shù)組長度和元素指針瘤袖。為NSArray 子類。
NSMutableArray *muArray1=[NSMutableArray arrayWithObjects:p1,p2,p3,p4, nil];
@interface NSMutableArray<ObjectType> : NSArray<ObjectType>
->NSMutableArray 初始化后昂验,會分配一個緩存容量capacity捂敌,一般大于實際元素數(shù)量,當長度增長時既琴,如實際需求大于capacity占婉,其capacity會以近似二倍的方式指數(shù)增長。伴隨代價:
-->1.分配新的堆內(nèi)存 2*capacity
-->2.將原來堆內(nèi)存上的元素拷貝到新內(nèi)存
-->3.釋放原來堆內(nèi)存
->最佳實踐:估計好capacity甫恩,預先分配一定容量逆济,避免以后增長
int count=100;
NSMutableArray *muArray2=[NSMutableArray arrayWithCapacity:10];

for (int i=0; i< count; i++) {
    BLNPoint *pt=[[BLNPoint alloc] initWithX:i*10 WithY:i*20];
    [muArray2 addObject: pt];
}

->盡量避免使用 insertObject:atIndex: 和removeObjectAtIndex:等操作,因為會改變數(shù)組元素序列,涉及大量內(nèi)存拷貝操作奖慌,代價高抛虫。

認識Set

->NSSet 是一個無序的集合,其存儲的對象不能重復简僧。
NSSet *set1 = [NSSet setWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil];

->NSSet 被定義為class建椰,引用類型,拷貝時具有引用語義岛马。
->常量集合 NSSet ,可變集合:NSMutableSet:
-->1.常量性:長度和元素指針都不能更改棉姐。但指針指向的對象內(nèi)部可以更改。
-->2.創(chuàng)建NSMutableSet時用initWithCapacity提前設置capacity啦逆。
NSMutableSet *set2 = [NSMutableSet setWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil]; [set2 addObject:@"London"]; [set2 addObject:@"Paris"]; [set2 removeObject:@"Beijing"]; for(NSString* item in set2) { NSLog(@"%@", item); }
結(jié)果:

結(jié)果01.png

->支持Fast Enumeration 和 NSEnumerator遍歷伞矩,前者較快。

認識 Dictionary

->NSDictionary是一個存儲key-value的無序集合蹦浦,key唯一扭吁,value可重復。
NSDictionary *dictionary1 = @{ @"Shanghai" : p1, @"Beijing" : p2, @"New York" : p3, @"Paris" : p4};
->NSDictionary被定義為class盲镶,引用類型侥袜,拷貝時具有引用意義。
->常量集合 NSDictionary,可變集合: NSMutableDictionary:
NSMutableDictionary *dictionary2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: p1,@"Shanghai", p2,@"Beijing", p3,@"New York", p4,@"Paris", nil];
-->常量性:長度和元素指針都不能更改溉贿。但指針指向的對象內(nèi)部可以更改枫吧。
-->創(chuàng)建NSMutableDictionary 時用initWithCapacity 提前設置capacity
->支持Fast Enumeration和NSEnumerator遍歷,前者較快宇色。
for(NSString* key in dictionary1) { id object=dictionary1[key]; NSLog(@"key:%@, object:%@", key, object); }
-objectsForKeys:notFoundMarker:在給定鍵沒有找到時返回給定對象九杂。
-allKeys````-allObjects獲取字典的所有鍵值或所有對象。
排序
1.-sortedArrayUsingSortDescriptors:
2.-sortedArrayUsingFunction:context:
3.-sortedArrayUsingSelector:

其他類型

1.NSNumber
NSNumber類來封裝基本數(shù)據(jù)類型宣蠕。以下類方法創(chuàng)建新的NSNumber對象:
+(NSNumber *) numberWithChar:(char) value; +(NSNumber *) numberWithInt:(int) value; +(NSNumber *) numberWithFloat:(float) value; +(NSNumber *) numberWithBool:(BOOL) value;
可以通過下面的實例方法重新獲得基本類型數(shù)據(jù):
-(char) charValue; -(int) intValue; -(float) floatValue; -(BOOL) boolValue; -(NSString *) stringValue;
裝箱(boxing):將一個基本類型的數(shù)據(jù)封裝成對象的過程例隆。
開箱(unboxing):從對象中提取基本類型的數(shù)據(jù)。
OC不支持自動裝箱功能抢蚀。

NSValue

創(chuàng)建新的NSValue對象:
+(NSValue *) valueWithBytes: (const void *) value objCType:(const char *) type;
NSNumber是NSValue的子類镀层,NSValue可以封裝任意值∶笄可以使用NSValue將結(jié)構(gòu)體放入NSArray 和NSDictionary中唱逢。
NSRect rect = NSMakeRect(1,2,20,30); NSValue *value = [NSValue valueWithBytes:&rect objType:@encode(NSRect)]; [array addObject:value];

10.自動引用計數(shù)ARC

了解ARC

->自動引用計數(shù)(Automatic Reference Counting)是Objective-C默認的內(nèi)存管理機制,其針對堆上的對象屋休,由編譯器自動生成操作引用計數(shù)的指令(retain或release)坞古,來管理對象的創(chuàng)建與釋放。
->哪些對象受ARC管理:
-->1.OC對象指針
-->2.Block指針
-->使用attribute((NSObject))定義的typedef
->哪些對象不受ARC管理:
-->1.值類型(簡單值類型劫樟,C語言struct)
-->2.使用其他方式分配的堆對象(如使用malloc分配)
-->3.非內(nèi)存資源

引用計數(shù)管理

->新創(chuàng)建(使用alloc痪枫,new织堂,copy等)一個引用類型對象,引用計數(shù)為1
BLNPoint *p1 = [[BLNPoint alloc]init]; BLNRectangle *rect = [[BLNRectangle alloc]init];
->對象引用計數(shù)增1——retain操作:
-->1.將對象引用賦值給其他變量或常量听怕。
BLNPoint *p2 = p1;
-->2.將對象引用賦值給其他屬性或?qū)嵗兞俊?br> rect.center = p1;
-->3.將對象傳遞給函數(shù)參數(shù)捧挺,或者返回值虑绵。
draw(p1);
-->4.將對象加入集合中尿瞭。
array=[[NSMutableArray alloc]initWithCapacity:10]; [array addObject:p1];
->對象引用計數(shù)減1——release操作:
-->1.將局部變量或全局變量賦值為nil或其他值。
p1 = nil; p2 = nil;
-->2.將屬性賦值為nil或其他值翅睛。
rect.center = nil;
-->3.實例屬性所在的對象被釋放声搁。
-->4.參數(shù)或局部變量離開函數(shù)。
-->5.將對象從集合中刪除捕发。
[array removeObjectAtIndex:0];
->引用計數(shù)變?yōu)?時疏旨,內(nèi)存自動被釋放。

引用計數(shù)
引用計數(shù).png
自動釋放池(Autorelease Pool)

->release會導致對象立即釋放扎酷。如果頻繁對 對象進行release檐涝,可能會造成瑣碎的內(nèi)存管理負擔。autorelease可以將release的調(diào)用延遲到自動釋放池被釋放時法挨。
->推薦使用自動釋放池(Autorelease Pool)Block谁榜,當其結(jié)束時,所有接受autorelease消息的對象將會被立即釋放(即發(fā)送release消息)凡纳。
->AppKit和UIKit框架在處理每一次事件循環(huán)迭代時窃植,都會將其放入一個Autorelease Pool中。大多數(shù)情況荐糜,無需程序員干預巷怜。

自動釋放池(Autorelease pool)
自動釋放池.png
什么時候需要手工管理Autorelease Pool

->編寫的程序不基于UI框架,如命令行程序暴氏。
->在循環(huán)中創(chuàng)建大量臨時對象延塑,需要更早地釋放,避免臨時對象聚集導致內(nèi)存峰值過大答渔。
->在主線程之外創(chuàng)建新的線程关带,在新線程開始執(zhí)行處,需要創(chuàng)建自己的Autorelease Pool.
->可以嵌套使用Autorelease Pool.

11.類型合同:協(xié)議

認識協(xié)議 Protocol

->協(xié)議:類型的合同約定研儒,只描述外部接口豫缨,不提供具體實現(xiàn)。
->協(xié)議可以包含以下成員:
-->1.屬性
-->2.實例方法
-->3.類方法
-->4.初始化器-不常用
-->5.析構(gòu)器-不常用
@protocol Drawable @property NSInteger x; @property NSInteger y; -(void)draw; +(void)createShape; @optional -(void)moveToX:(NSInteger)x withY:(NSInteger)y; @end
->協(xié)議中無法包含實例變量成員
->協(xié)議中定義的屬性本質(zhì)上是訪問器方法端朵,編譯器不會合成實例變量好芭。

聲明協(xié)議關(guān)鍵字

1.@required:表明其后所有的方法是實現(xiàn)該協(xié)議的必須方法。協(xié)議的默認行為冲呢,如果沒有指定@required 舍败,協(xié)議中聲明的所有方法都默認是必須實現(xiàn)的。
2.@optional:表明實現(xiàn)類時可以選擇性實現(xiàn)該方法。實現(xiàn)了該協(xié)議的類可以選擇不實現(xiàn)任何在@optional后所有聲明的方法邻薯。

使用協(xié)議

->一個類遵守協(xié)議裙戏,需要實現(xiàn)協(xié)議約定的的所有@required成員
@interface BLNPoint : NSObject<Drawable>
@implementation BLNPoint -(void)draw { NSLog(@"%@",self); } +(void)createShape{ NSLog(@"Create a Shape"); } -(void)moveToX:(NSInteger)x withY:(NSInteger)y { self.x = x; self.y = y; } @end
-->協(xié)議中的屬性須在實現(xiàn)類的.h文件中聲明(編譯器合成實例變量需要)。
@property NSInteger x; @property NSInteger y;
->注意編譯警告??:
-->1遵守協(xié)議后卻沒有實現(xiàn)必選協(xié)議方法時厕诡,會出現(xiàn)警告提示累榜。
-->2.協(xié)議類型變量被賦值非協(xié)議類型對象時,會出現(xiàn)警告提示灵嫌。
->協(xié)議本質(zhì)上是一種類型壹罚,可以作為聲明類型,但不能創(chuàng)建實例寿羞。
void process1(id<Drawable> obj) { [obj draw]; NSLog(@"[%ld,%ld]",(long)obj.x,(long)obj.y); }
->檢查協(xié)議類型
-->使用conformsToProtocol:檢查對象是否實現(xiàn)了協(xié)議猖凛。
void process2(id obj){ if ([obj conformsToProtocol:@protocol(AProtocol) ]) { [obj methodA]; } }

更多協(xié)議形式

->協(xié)議繼承
-->1.一個協(xié)議可以繼承一個或多個協(xié)議
@protocol BProtocol <AProtocol> -(void)methodB; @end
-->2.實現(xiàn)子協(xié)議的類型,也必須實現(xiàn)父協(xié)議中約定的成員
@interface ClassB : NSObject<BProtocol> @end
@implementation ClassB -(void)methodA{ NSLog(@"ClassB methodA"); } -(void)methodB{ NSLog(@"ClassB methodB"); } @end
->協(xié)議組合
-->可以使用protocol<A,B,...>來組合多個協(xié)議
void process4(id<CProtocol,AProtocol> obj){ [obj methodA]; [obj methodC]; }
-->實現(xiàn)組合協(xié)議的類型绪穆,必須實現(xiàn)組合協(xié)議中的每一個協(xié)議
@implementation ClassC -(void)methodA{ NSLog(@"ClassC methodA"); } -(void)methodC{ NSLog(@"ClassC methodC"); } @end
->可選協(xié)議
-->協(xié)議的 某些成員可以定義為optional辨泳,不必實現(xiàn)
@optional -(void)moveToX:(NSInteger)x withY:(NSInteger)y;

了解常用協(xié)議

->NSObject:包含對象的常用操作,想等玖院、字符串表示菠红、哈希
@protocol NSObject
- (BOOL)isEqual:(id)object; @property (readonly) NSUInteger hash;
->NSCopying:支持復制的類型必須遵守該協(xié)議
@protocol NSCopying
- (id)copyWithZone:(nullable NSZone *)zone; @end
->NSMutableCopying:在NSCopying協(xié)議的基礎上,支持復制數(shù)據(jù)的可變性
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(nullable NSZone *)zone; @end
->NSFastEnumeration:實現(xiàn)快速枚舉 for-in的類型采用
@protocol NSFastEnumeration
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len; @end
->NSCoding協(xié)議:支持將對象圖進行編碼/解碼以支持對象序列化
@protocol NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER @end

12.類別與擴展

類別 Category

->類別支持在沒有源代碼的情況下司恳,基于某些特定的場合途乃,為一個類增加功能。
-->1.可以添加
--->1.1類方法
--->1.2實例方法
--->1.3重寫基類方法
-->2.不能添加
--->2.1屬性
--->2.2實例變量
--->2.3已存在的同名方法
@interface BLNPoint(Drawing)
-(void)draw; -(void)setWeight:(NSInteger)weight; -(NSInteger)weight; @end
->命名規(guī)范
-->文件名:類名+擴展方法扔傅,如 NSString+Drawing.h/.m
NSString+Drawing.h
NSString+Drawing.m

使用類別

->使用場景
-->1.適合在沒有源代碼的情況下耍共,向已經(jīng)封裝的類中添加方法。
@interface NSString(Drawing)
-->2.為一個類在某些特殊場景下增加功能
@interface BLNPoint(Drawing)
-(void)draw; -(void)setWeight:(NSInteger)weight; -(NSInteger)weight; @end
-->3.對于復雜的大型文件分割實現(xiàn)猎塞。
->添加類別
-->1.自己創(chuàng)建的類
-->2.系統(tǒng)的類
-->3.第三方庫

擴展 Extension

->擴展支持在編譯時试读,有類的源代碼的前提下,向類添加功能荠耽」澈В可以將擴展看做匿名的類別。
->接口定義在.m文件中@implementation前聲明铝量,實現(xiàn)代碼仍然在@implementation內(nèi)實現(xiàn)倘屹。
@interface Circle () { NSString * _name; } @property (readwrite )NSInteger radius;//修改讀寫屬性 @property NSInteger center;//添加屬性 -(float)getDiameter;//實例方法 +(void)process:(Circle*) circle;//類方法 @end
->擴展支持添加以下成員:
-->1.添加屬性。
-->2.添加實例成員。
-->3.添加類方法。
-->4.添加實例方法岗仑。
-->5.改寫屬性的讀寫屬性。

使用擴展

->擴展實現(xiàn)的成員都只能在.m實現(xiàn)文件內(nèi)部訪問烛缔,在類外不可以直接訪問馏段。
->擴展的主要用途在于信息隱藏,隱藏一些外部無需訪問践瓷、而內(nèi)部實現(xiàn)又需要使用的屬性院喜、方法:
-->1.類的主接口主要用于“對類外公開”的接口。
-->2.類的擴展接口用于“對類內(nèi)可見”的接口晕翠。

![訪問擴展限制2 .png](http://upload-images.jianshu.io/upload_images/1659279-60f9d8a817756a05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市崖面,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巫员,老刑警劉巖甲棍,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件简识,死亡現(xiàn)場離奇詭異感猛,居然都是意外死亡七扰,警方通過查閱死者的電腦和手機陪白,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門颈走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咱士,你說我怎么就攤上這事⌒蚶鳎” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵道盏,是天一觀的道長荷逞。 經(jīng)常有香客問我,道長种远,這世上最難降的妖魔是什么恨搓? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮常拓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茎辐。我一直安慰自己掂恕,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布依啰。 她就那樣靜靜地躺著店枣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闷旧。 梳的紋絲不亂的頭發(fā)上钧唐,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天钝侠,我揣著相機與錄音,去河邊找鬼机错。 笑死弱匪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的萧诫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼哑诊,長吁一口氣:“原來是場噩夢啊……” “哼镀裤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暑劝,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤担猛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后傅联,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒸走,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年猜嘱,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫁艇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弦撩。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡益楼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出感凤,到底是詐尸還是另有隱情,我是刑警寧澤禽翼,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布闰挡,位于F島的核電站礁哄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏桐绒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一蚀乔、第九天 我趴在偏房一處隱蔽的房頂上張望佳簸。 院中可真熱鬧,春花似錦听想、人聲如沸马胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽威彰。三九已至,卻和暖如春舔痕,著一層夾襖步出監(jiān)牢的瞬間豹缀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工啸如, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氮惯,地道東北人筐骇。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像厌均,于是被迫代替她去往敵國和親告唆。 傳聞我的和親對象是個殘疾皇子晶密,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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