object-c學(xué)習(xí)筆記(GeekBand)02

字符串處理
認(rèn)識(shí)
->NSString是一個(gè)Unicode編碼呢岗、16位字符的字符序列冕香。語(yǔ)法:NSString *someString = @"this is a string";
->NSString被定義為類,引用類型敷燎,拷貝時(shí)具有引用語(yǔ)義暂筝。編譯器遇到@并緊跟著包含在雙引號(hào)中的字符串就會(huì)創(chuàng)建一個(gè)靜態(tài)的包含所提供字符串的NSString對(duì)象。->初始化方法:字面量初始化硬贯、初始化器焕襟、工廠方法。
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擁有恒定性饭豹,所有的操作無(wú)法更改字符串本身鸵赖,如有更改务漩,都是返回新值的形式。NSLog(@"str1:%p",str1); NSLog(@"str2:%p",str2); NSLog(@"str3:%p",str3); NSLog(@"str4:%p",str4);

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"); }``

->NSString擁有共享機(jī)制它褪,引用計(jì)數(shù)管理對(duì)其有特殊的管理規(guī)則饵骨。
NSString內(nèi)存模型

NSString共享機(jī)制

NSMutableString
->NSMutableString具有可變性,NSString具有恒定性茫打。-> NSMutableString 為NSString的子類居触。-> NSMutableString不具有在原有內(nèi)存上直接增長(zhǎng),而是重新分配一個(gè)更大或更小的緩存容量存放字符老赤。-> NSMutableString不具有共享機(jī)制轮洋,NSString具有共享機(jī)制。

緩存容量與增長(zhǎng)
->字符串初始化后抬旺,會(huì)分配一個(gè)緩存容量capacity弊予,其長(zhǎng)度一般大于實(shí)際的字符數(shù)量。->當(dāng)字符串增長(zhǎng)時(shí)开财,如果實(shí)際需求大于capacity汉柒,其capacity會(huì)以二倍的方式指數(shù)增長(zhǎng)。伴隨的代價(jià):-->1.分配新的堆內(nèi)存 2*capacity-->2.將原來堆內(nèi)存上的內(nèi)存拷貝到新內(nèi)存-->3.釋放原來堆內(nèi)存->最佳實(shí)踐责鳍,估計(jì)好capacity碾褂,預(yù)先分配好一定容量,避免以后capacity的增長(zhǎng)
NSString常用操作
->NSString-->1.訪問字符串:獲取字符串字符薇搁、字符串長(zhǎng)度斋扰、字面量、大小寫轉(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
認(rèn)識(shí)數(shù)組
->數(shù)組是一個(gè)有序的元素序列,支持隨機(jī)存取忧饭。索引從0開始扛伍,索引訪問越界會(huì)拋出運(yùn)行時(shí)異常。注意與C語(yǔ)言數(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ù)組中元素的個(gè)數(shù)刺洒,返回一個(gè)NSInteger.->NSArray被定義為class鳖宾,引用類型,拷貝時(shí)具有引用語(yǔ)義逆航。->NSArray的元素必須是對(duì)象,即NSObject的子類。
@interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>
-->1.如果為基本數(shù)值類型呀闻,須要用NSNumber 封裝為對(duì)象類型后妄呕,才能放入數(shù)組中。
NSInteger number=100; NSNumber *numberObject1= [NSNumber numberWithInteger:number ];
-->2.如果為C語(yǔ)言結(jié)構(gòu)類型抹剩,須要用NSValue 封裝為對(duì)象類型后撑帖,才能放入數(shù)組中。
NSValue *pointObject= [NSValue value:&point withObjCType:@encode(Point)];
-->3.數(shù)組元素可以是不同對(duì)象類型吧兔,可能會(huì)有類型不安全磷仰。->NSArray具有常量性:長(zhǎng)度和元素指針都不能更改。但指針指向的對(duì)象內(nèi)部可以更改境蔼。

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

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

-objectAtIndex:
方法訪問數(shù)組中的單個(gè)元素沟堡,返回給定索引處的單個(gè)元素侧但。-lastObject:
方法返回?cái)?shù)組的最后一個(gè)元素。->數(shù)組排序-->不改變?cè)瓟?shù)組(常量性)航罗,返回新數(shù)組禀横。
NSArray* sortArray1=[array1 sortedArrayUsingSelector:@selector(compare:)];

使用NSMutableArray
->NSMutableArray 支持更改數(shù)組長(zhǎng)度和元素指針。為NSArray 子類粥血。
NSMutableArray muArray1=[NSMutableArray arrayWithObjects:p1,p2,p3,p4, nil];
@interface NSMutableArray<ObjectType> : NSArray<ObjectType>
->NSMutableArray 初始化后柏锄,會(huì)分配一個(gè)緩存容量capacity,一般大于實(shí)際元素?cái)?shù)量复亏,當(dāng)長(zhǎng)度增長(zhǎng)時(shí)趾娃,如實(shí)際需求大于capacity,其capacity會(huì)以近似二倍的方式指數(shù)增長(zhǎng)缔御。伴隨代價(jià):-->1.分配新的堆內(nèi)存 2
capacity-->2.將原來堆內(nèi)存上的元素拷貝到新內(nèi)存-->3.釋放原來堆內(nèi)存->最佳實(shí)踐:估計(jì)好capacity抬闷,預(yù)先分配一定容量,避免以后增長(zhǎng)int count=100;
NSMutableArray muArray2=[NSMutableArray arrayWithCapacity:10];
for (int i=0; i< count; i++) { BLNPoint pt=[[BLNPoint alloc] initWithX:i10 WithY:i
20]; [muArray2 addObject: pt];}

->盡量避免使用 insertObject:atIndex: 和removeObjectAtIndex:等操作刹淌,因?yàn)闀?huì)改變數(shù)組元素序列饶氏,涉及大量?jī)?nèi)存拷貝操作讥耗,代價(jià)高。
Set
->NSSet 是一個(gè)無(wú)序的集合疹启,其存儲(chǔ)的對(duì)象不能重復(fù)古程。NSSet *set1 = [NSSet setWithObjects:@"Shanghai",@"Beijing",@"New York",@"Paris", nil];

->NSSet 被定義為class,引用類型喊崖,拷貝時(shí)具有引用語(yǔ)義挣磨。->常量集合 NSSet ,可變集合:NSMutableSet:-->1.常量性:長(zhǎng)度和元素指針都不能更改。但指針指向的對(duì)象內(nèi)部可以更改荤懂。-->2.創(chuàng)建NSMutableSet時(shí)用initWithCapacity提前設(shè)置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); }

->支持Fast Enumeration 和 NSEnumerator遍歷,前者較快节仿。
認(rèn)識(shí) Dictionary
->NSDictionary是一個(gè)存儲(chǔ)key-value的無(wú)序集合晤锥,key唯一,value可重復(fù)廊宪。
NSDictionary *dictionary1 = @{ @"Shanghai" : p1, @"Beijing" : p2, @"New York" : p3, @"Paris" : p4};
->NSDictionary被定義為class矾瘾,引用類型,拷貝時(shí)具有引用意義箭启。->常量集合 NSDictionary,可變集合:
NSMutableDictionary:NSMutableDictionary dictionary2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: p1,@"Shanghai", p2,@"Beijing", p3,@"New York", p4,@"Paris", nil];
-->常量性:長(zhǎng)度和元素指針都不能更改壕翩。但指針指向的對(duì)象內(nèi)部可以更改。-->創(chuàng)建NSMutableDictionary 時(shí)用initWithCapacity 提前設(shè)置capacity->支持Fast Enumeration和NSEnumerator遍歷傅寡,前者較快放妈。for(NSString
key in dictionary1) { id object=dictionary1[key]; NSLog(@"key:%@, object:%@", key, object); }
-objectsForKeys:notFoundMarker:
在給定鍵沒有找到時(shí)返回給定對(duì)象。-allKeys````-allObjects
獲取字典的所有鍵值或所有對(duì)象荐操。排序
1.-sortedArrayUsingSortDescriptors:
2.-sortedArrayUsingFunction:context:
3.-sortedArrayUsingSelector:

其他類型
1.NSNumberNSNumber類來封裝基本數(shù)據(jù)類型芜抒。以下類方法創(chuàng)建新的NSNumber對(duì)象:
+(NSNumber *) numberWithChar:(char) value;+(NSNumber *) numberWithInt:(int) value;+(NSNumber *) numberWithFloat:(float) value;+(NSNumber *) numberWithBool:(BOOL) value;
可以通過下面的實(shí)例方法重新獲得基本類型數(shù)據(jù):
-(char) charValue;-(int) intValue;-(float) floatValue;-(BOOL) boolValue;-(NSString *) stringValue;
裝箱(boxing):將一個(gè)基本類型的數(shù)據(jù)封裝成對(duì)象的過程。開箱(unboxing):從對(duì)象中提取基本類型的數(shù)據(jù)托启。OC不支持自動(dòng)裝箱功能挽绩。
NSValue
創(chuàng)建新的NSValue對(duì)象:
+(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.自動(dòng)引用計(jì)數(shù)ARC
了解ARC
->自動(dòng)引用計(jì)數(shù)(Automatic Reference Counting)是Objective-C默認(rèn)的內(nèi)存管理機(jī)制肩民,其針對(duì)堆上的對(duì)象,由編譯器自動(dòng)生成操作引用計(jì)數(shù)的指令(retain或release)链方,來管理對(duì)象的創(chuàng)建與釋放持痰。->哪些對(duì)象受ARC管理:-->1.OC對(duì)象指針-->2.Block指針-->使用attribute((NSObject))定義的typedef->哪些對(duì)象不受ARC管理:-->1.值類型(簡(jiǎn)單值類型,C語(yǔ)言struct)-->2.使用其他方式分配的堆對(duì)象(如使用malloc分配)-->3.非內(nèi)存資源
引用計(jì)數(shù)管理
->新創(chuàng)建(使用alloc祟蚀,new工窍,copy等)一個(gè)引用類型對(duì)象割卖,引用計(jì)數(shù)為1BLNPoint *p1 = [[BLNPoint alloc]init]; BLNRectangle *rect = [[BLNRectangle alloc]init];
->對(duì)象引用計(jì)數(shù)增1——retain操作:-->1.將對(duì)象引用賦值給其他變量或常量。BLNPoint *p2 = p1;
-->2.將對(duì)象引用賦值給其他屬性或?qū)嵗兞炕汲ect.center = p1;
-->3.將對(duì)象傳遞給函數(shù)參數(shù)鹏溯,或者返回值。draw(p1);
-->4.將對(duì)象加入集合中淹仑。array=[[NSMutableArray alloc]initWithCapacity:10]; [array addObject:p1];
->對(duì)象引用計(jì)數(shù)減1——release操作:-->1.將局部變量或全局變量賦值為nil或其他值丙挽。p1 = nil; p2 = nil;
-->2.將屬性賦值為nil或其他值。rect.center = nil;
-->3.實(shí)例屬性所在的對(duì)象被釋放匀借。-->4.參數(shù)或局部變量離開函數(shù)颜阐。-->5.將對(duì)象從集合中刪除。[array removeObjectAtIndex:0];
->引用計(jì)數(shù)變?yōu)?時(shí)吓肋,內(nèi)存自動(dòng)被釋放凳怨。

自動(dòng)釋放池(Autorelease Pool)
->release會(huì)導(dǎo)致對(duì)象立即釋放。如果頻繁對(duì) 對(duì)象進(jìn)行release是鬼,可能會(huì)造成瑣碎的內(nèi)存管理負(fù)擔(dān)肤舞。autorelease可以將release的調(diào)用延遲到自動(dòng)釋放池被釋放時(shí)。->推薦使用自動(dòng)釋放池(Autorelease Pool)Block屑咳,當(dāng)其結(jié)束時(shí)萨赁,所有接受autorelease消息的對(duì)象將會(huì)被立即釋放(即發(fā)送release消息)。->AppKit和UIKit框架在處理每一次事件循環(huán)迭代時(shí)兆龙,都會(huì)將其放入一個(gè)Autorelease Pool中杖爽。大多數(shù)情況,無(wú)需程序員干預(yù)紫皇。

什么時(shí)候需要手工管理Autorelease Pool
->編寫的程序不基于UI框架慰安,如命令行程序。->在循環(huán)中創(chuàng)建大量臨時(shí)對(duì)象聪铺,需要更早地釋放化焕,避免臨時(shí)對(duì)象聚集導(dǎo)致內(nèi)存峰值過大。->在主線程之外創(chuàng)建新的線程铃剔,在新線程開始執(zhí)行處撒桨,需要?jiǎng)?chuàng)建自己的Autorelease Pool.->可以嵌套使用Autorelease Pool.
11.類型合同:協(xié)議
認(rèn)識(shí)協(xié)議 Protocol
->協(xié)議:類型的合同約定,只描述外部接口键兜,不提供具體實(shí)現(xiàn)凤类。->協(xié)議可以包含以下成員:-->1.屬性-->2.實(shí)例方法-->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é)議中無(wú)法包含實(shí)例變量成員->協(xié)議中定義的屬性本質(zhì)上是訪問器方法,編譯器不會(huì)合成實(shí)例變量普气。
聲明協(xié)議關(guān)鍵字
1.@required:表明其后所有的方法是實(shí)現(xiàn)該協(xié)議的必須方法谜疤。協(xié)議的默認(rèn)行為,如果沒有指定@required ,協(xié)議中聲明的所有方法都默認(rèn)是必須實(shí)現(xiàn)的夷磕。2.@optional:表明實(shí)現(xiàn)類時(shí)可以選擇性實(shí)現(xiàn)該方法履肃。實(shí)現(xiàn)了該協(xié)議的類可以選擇不實(shí)現(xiàn)任何在@optional后所有聲明的方法。
使用協(xié)議
->一個(gè)類遵守協(xié)議坐桩,需要實(shí)現(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é)議中的屬性須在實(shí)現(xiàn)類的.h文件中聲明(編譯器合成實(shí)例變量需要)尺棋。
@property NSInteger x;@property NSInteger y;
->注意編譯警告??:-->1遵守協(xié)議后卻沒有實(shí)現(xiàn)必選協(xié)議方法時(shí),會(huì)出現(xiàn)警告提示撕攒。-->2.協(xié)議類型變量被賦值非協(xié)議類型對(duì)象時(shí)陡鹃,會(huì)出現(xiàn)警告提示。->協(xié)議本質(zhì)上是一種類型抖坪,可以作為聲明類型萍鲸,但不能創(chuàng)建實(shí)例。
void process1(id<Drawable> obj){ [obj draw]; NSLog(@"[%ld,%ld]",(long)obj.x,(long)obj.y);}
->檢查協(xié)議類型-->使用conformsToProtocol:檢查對(duì)象是否實(shí)現(xiàn)了協(xié)議擦俐。
void process2(id obj){ if ([obj conformsToProtocol:@protocol(AProtocol) ]) { [obj methodA]; }}

更多協(xié)議形式
->協(xié)議繼承-->1.一個(gè)協(xié)議可以繼承一個(gè)或多個(gè)協(xié)議
@protocol BProtocol <AProtocol>-(void)methodB;@end
-->2.實(shí)現(xiàn)子協(xié)議的類型脊阴,也必須實(shí)現(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,...>來組合多個(gè)協(xié)議
void process4(id<CProtocol,AProtocol> obj){ [obj methodA]; [obj methodC];}
-->實(shí)現(xiàn)組合協(xié)議的類型,必須實(shí)現(xiàn)組合協(xié)議中的每一個(gè)協(xié)議
@implementation ClassC-(void)methodA{ NSLog(@"ClassC methodA");}-(void)methodC{ NSLog(@"ClassC methodC");}@end
->可選協(xié)議-->協(xié)議的 某些成員可以定義為optional蚯瞧,不必實(shí)現(xiàn)
@optional-(void)moveToX:(NSInteger)x withY:(NSInteger)y;

常用協(xié)議:
->NSObject:包含對(duì)象的常用操作嘿期,想等、字符串表示埋合、哈希
@protocol NSObject

  • (BOOL)isEqual:(id)object;@property (readonly) NSUInteger hash;
    ->NSCopying:支持復(fù)制的類型必須遵守該協(xié)議@protocol NSCopying
  • (id)copyWithZone:(nullable NSZone *)zone;@end
    ->NSMutableCopying:在NSCopying協(xié)議的基礎(chǔ)上备徐,支持復(fù)制數(shù)據(jù)的可變性
    @protocol NSMutableCopying
  • (id)mutableCopyWithZone:(nullable NSZone *)zone;
    @end
    ->NSFastEnumeration:實(shí)現(xiàn)快速枚舉 for-in的類型采用@protocol NSFastEnumeration
  • (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len;@end
    ->NSCoding協(xié)議:支持將對(duì)象圖進(jìn)行編碼/解碼以支持對(duì)象序列化
    @protocol NSCoding
  • (void)encodeWithCoder:(NSCoder *)aCoder;
  • (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; NS_DESIGNATED_INITIALIZER
    @end

12.類別與擴(kuò)展
類別 Category
->類別支持在沒有源代碼的情況下,基于某些特定的場(chǎng)合甚颂,為一個(gè)類增加功能蜜猾。-->1.可以添加--->1.1類方法--->1.2實(shí)例方法--->1.3重寫基類方法-->2.不能添加--->2.1屬性--->2.2實(shí)例變量--->2.3已存在的同名方法
@interface BLNPoint(Drawing)
-(void)draw;-(void)setWeight:(NSInteger)weight;-(NSInteger)weight;
@end
->命名規(guī)范-->文件名:類名+擴(kuò)展方法,如 NSString+Drawing.h/.mNSString+Drawing.h
NSString+Drawing.m

使用類別
->使用場(chǎng)景-->1.適合在沒有源代碼的情況下振诬,向已經(jīng)封裝的類中添加方法蹭睡。
@interface NSString(Drawing)
-->2.為一個(gè)類在某些特殊場(chǎng)景下增加功能
@interface BLNPoint(Drawing)
-(void)draw;-(void)setWeight:(NSInteger)weight;-(NSInteger)weight;
@end

-->3.對(duì)于復(fù)雜的大型文件分割實(shí)現(xiàn)。->添加類別-->1.自己創(chuàng)建的類-->2.系統(tǒng)的類-->3.第三方庫(kù)
擴(kuò)展 Extension
->擴(kuò)展支持在編譯時(shí)赶么,有類的源代碼的前提下肩豁,向類添加功能”枭耄可以將擴(kuò)展看做匿名的類別清钥。->接口定義在.m文件中@implementation前聲明,實(shí)現(xiàn)代碼仍然在@implementation內(nèi)實(shí)現(xiàn)放闺。
@interface Circle (){ NSString * _name;}@property (readwrite )
NSInteger radius;//修改讀寫屬性
@property NSInteger center;//添加屬性
-(float)getDiameter;//實(shí)例方法
+(void)process:(Circle*) circle;//類方法
@end
->擴(kuò)展支持添加以下成員:-->1.添加屬性循捺。-->2.添加實(shí)例成員。-->3.添加類方法雄人。-->4.添加實(shí)例方法。-->5.改寫屬性的讀寫屬性。
使用擴(kuò)展
->擴(kuò)展實(shí)現(xiàn)的成員都只能在.m實(shí)現(xiàn)文件內(nèi)部訪問础钠,在類外不可以直接訪問恰力。->擴(kuò)展的主要用途在于信息隱藏,隱藏一些外部無(wú)需訪問旗吁、而內(nèi)部實(shí)現(xiàn)又需要使用的屬性踩萎、方法:-->1.類的主接口主要用于“對(duì)類外公開”的接口。-->2.類的擴(kuò)展接口用于“對(duì)類內(nèi)可見”的接口很钓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末香府,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子码倦,更是在濱河造成了極大的恐慌企孩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袁稽,死亡現(xiàn)場(chǎng)離奇詭異勿璃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)推汽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門补疑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歹撒,你說我怎么就攤上這事莲组。” “怎么了暖夭?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵锹杈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鳞尔,道長(zhǎng)嬉橙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任寥假,我火速辦了婚禮市框,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糕韧。我一直安慰自己枫振,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布萤彩。 她就那樣靜靜地躺著粪滤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雀扶。 梳的紋絲不亂的頭發(fā)上杖小,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天肆汹,我揣著相機(jī)與錄音,去河邊找鬼予权。 笑死昂勉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扫腺。 我是一名探鬼主播岗照,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼笆环!你這毒婦竟也來了攒至?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤躁劣,失蹤者是張志新(化名)和其女友劉穎迫吐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體习绢,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡渠抹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闪萄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梧却。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖败去,靈堂內(nèi)的尸體忽然破棺而出放航,到底是詐尸還是另有隱情,我是刑警寧澤圆裕,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布广鳍,位于F島的核電站,受9級(jí)特大地震影響吓妆,放射性物質(zhì)發(fā)生泄漏赊时。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一行拢、第九天 我趴在偏房一處隱蔽的房頂上張望祖秒。 院中可真熱鬧,春花似錦舟奠、人聲如沸竭缝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抬纸。三九已至,卻和暖如春耿戚,著一層夾襖步出監(jiān)牢的瞬間湿故,已是汗流浹背阿趁。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晓锻,地道東北人歌焦。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砚哆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屑墨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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