iOS 代碼規(guī)范(自個公司)

iOS Objective-C Code Style

前言 : 為了使代碼清晰簡潔,方便閱讀理解陕悬,都會統(tǒng)一遵從一定的代碼規(guī)范 .
本期使用MVC框架 , 保持公共API 的簡潔性 .

一、命名

1.每行的長度

每行的長度不得超過 120 個字符
設(shè)置: “Xcode => Preferences => TextEditing => 勾選 Show Page Guide / 輸入100 => OK”


2.關(guān)于命名

統(tǒng)一要求 : 含義清楚喳坠,盡量做到不需要注釋也能了解其作用杈曲,若做不到,就加注釋 .
          按照駝峰式命名法則:(大駝峰:每個單詞首字母都大寫--小駝峰:第一個單子首字母小寫,其余都大寫)
         類名首字母大寫,方法首字母小寫,方法中的參數(shù)首字母小寫,長度無限制.
         盡量方法名讀起來一句話
         變量名的大小在2-20個字母之間,避免單字母變量.


1>property變量


@property (nonatomic, strong) NSMutableArray *駝峰命名規(guī)則:
                                                指針*要靠近變量名
                                                前部分參數(shù)用途: path 
                                                后部分參數(shù)類型: muArr
                                                最后: 注釋(若后期維護(hù)新添加或刪除的變量-加自個名字)
@property (nonatomic, strong) NSMutableArray *pathMuArr;//可變數(shù)組用來儲存路徑- LYG 

縮寫規(guī)則:
        (如:表)

字符串
NSString
str
可變字符串
NSMutableString
muStr
字典
NSDictionary
dic
可變字典
NSMutableDictionary
muDic
數(shù)組
NSArray
arr
可變數(shù)組
NSMutableArray
muArr
數(shù)據(jù)
NSData
data
可變數(shù)組
NSMutableData
muData
標(biāo)簽
UILabel
label
按鈕
UIButton
btn
圖片
UIImage
img
圖片視圖
UIImageView
imgV
bool 值
BOOL
is…

UINavigationController
nav

backgroundColor
bg

UITableViewCell
cell

UIViewController
viewController

UIView
view

2>宏 Define

?   全部大寫,單詞用_進(jìn)行分割(不帶參數(shù))
    #define THIS_IS_AN_MACRO @"THIS_IS_AN_MACRO"

?   以字母 k 開頭,后面要遵循大駝峰命名規(guī)則(不帶參數(shù))
    #define kDefaultLineWidth 8
   #define kWidth self.frame.size.width

?   小駝峰命名(帶參數(shù))
 #define getImageUrl(url) [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kBaseUrl,url]]


3>枚舉 Eeum

?   枚舉命名和類的命名一樣
?   枚舉中的內(nèi)容命名需要以改枚舉類型名稱開頭

    typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
     AFNetworkReachabilityStatusUnknown = -1,
     AFNetworkReachabilityStatusNotReachable = 0,
     AFNetworkReachabilityStatusReachableViaWWAN = 1,
     AFNetworkReachabilityStatusReachableViaWiFi = 2
    };

    typedef NS_ENUM(NSInteger ,DrawStyle){
        DrawStyleFreedomLine = 100,
        DrawStyleLine = 1,
        DrawStyleCircle = 2,
        DrawStyleRectangle = 3,
        DrawStyleOval = 4,
        DrawStyleTriangle = 5,
        DrawStyleCurve = 6,
        DrawStyleRubber = 7
    };      


4>代理 Delegate

    Protocol : 使用 delegate 作為后綴

?   類的實例必須為回調(diào)方法的參數(shù)之一(numberOfRowsInSection中的section)
    -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section


?   回調(diào)方法的參數(shù)只有類自己的情況非驮,方法名要符合實際含義(numberOfSectionsInTableView)
      -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView


?   以類的名字開頭(回調(diào)方法存在兩個以上參數(shù)的情況)以表明此方法是屬于哪個類的(tableView)
    -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


類型標(biāo)示符交汤、代理名稱、尖括號間不留空格
該規(guī)則同樣適用于:類聲明劫笙、實例變量和方法聲明 
 每一個delegate都把對應(yīng)的protocol名字帶上芙扎,delegate方法不要亂寫,寫到一塊區(qū)域里面去

@interface MyProtocoledClass : NSObject<NSWindowDelegate> {
@private
id<MyFancyDelegate> _delegate;
}

  • (void)setDelegate:(id<MyFancyDelegate>)aDelegate;@end
    如果類聲明中包含多個protocal,每個protocal占用一行,縮進(jìn)4個字符填大。
    如:
    @interface CustomViewController : ViewController<
    AbcDelegate,
    DefDelegate

{
... }

5>block

使用Block時戒洼,內(nèi)容四個空格縮進(jìn),“^”后帶有參數(shù)時允华,參數(shù)與“{”之間有一個空格縮進(jìn)
@property (nonatomic ,copy) void (^colorBlock)(UIColor *);




6>方法的聲明和定義

?   在 - OR + 和返回值之間留 1 個空格,方法名和第一個參數(shù)間不留空格 
- (void)doSomethingWithString:(NSString *)theString 
    {
      ...
      }
  ? 當(dāng)參數(shù)過長時,每個參數(shù)占用一行,以冒號對齊
     - (void)doSomethingWith:(GTMFoo *)theFoo
                        rect:(NSRect)theRect
                    interval:(float)theInterval
        {
        ...
        }

  ? 如果方法名比參數(shù)名短,每個參數(shù)占用一行,至少縮進(jìn)4個字符,且為垂直對齊
    - (void)writeA:(NSString *)firstStr
            withBBBBBBBBBBB:(NSString *)nextStr
            withCCCCCC:(NSString *)lastStr
    {
      ...  
    }


  ? Method與Method之間空一行(官方規(guī)定左括號應(yīng)另起一行)
    - (void)samplePrivateMethod
    {
        ...
    }

    - (void)sampleForIf
    {
        ...
    }




7>使用#pragma Mark - 標(biāo)注一類函數(shù)圈浇,便于查找

iOS Objective-C Code Style

前言 : 為了使代碼清晰簡潔,方便閱讀理解靴寂,都會統(tǒng)一遵從一定的代碼規(guī)范 .
本期使用MVC框架 , 保持公共API 的簡潔性 .

一磷蜀、命名

1.每行的長度

每行的長度不得超過 120 個字符
設(shè)置: “Xcode => Preferences => TextEditing => 勾選 Show Page Guide / 輸入100 => OK”


2.關(guān)于命名

統(tǒng)一要求 : 含義清楚,盡量做到不需要注釋也能了解其作用百炬,若做不到褐隆,就加注釋 .
          按照駝峰式命名法則:(大駝峰:每個單詞首字母都大寫--小駝峰:第一個單子首字母小寫,其余都大寫)
         類名首字母大寫,方法首字母小寫,方法中的參數(shù)首字母小寫,長度無限制.
         盡量方法名讀起來一句話
         變量名的大小在2-20個字母之間,避免單字母變量.


1>property變量


@property (nonatomic, strong) NSMutableArray *駝峰命名規(guī)則:
                                                指針*要靠近變量名
                                                前部分參數(shù)用途: path 
                                                后部分參數(shù)類型: muArr
                                                最后: 注釋(若后期維護(hù)新添加或刪除的變量-加自個名字)
@property (nonatomic, strong) NSMutableArray *pathMuArr;//可變數(shù)組用來儲存路徑- LYG 

縮寫規(guī)則:
        (如:表)

字符串
NSString
str
可變字符串
NSMutableString
muStr
字典
NSDictionary
dic
可變字典
NSMutableDictionary
muDic
數(shù)組
NSArray
arr
可變數(shù)組
NSMutableArray
muArr
數(shù)據(jù)
NSData
data
可變數(shù)組
NSMutableData
muData
標(biāo)簽
UILabel
label
按鈕
UIButton
btn
圖片
UIImage
img
圖片視圖
UIImageView
imgV
bool 值
BOOL
is…

UINavigationController
nav

backgroundColor
bg

UITableViewCell
cell

UIViewController
viewController

UIView
view

2>宏 Define

?   全部大寫,單詞用_進(jìn)行分割(不帶參數(shù))
    #define THIS_IS_AN_MACRO @"THIS_IS_AN_MACRO"

?   以字母 k 開頭,后面要遵循大駝峰命名規(guī)則(不帶參數(shù))
    #define kDefaultLineWidth 8
   #define kWidth self.frame.size.width

?   小駝峰命名(帶參數(shù))
 #define getImageUrl(url) [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",kBaseUrl,url]]


3>枚舉 Eeum

?   枚舉命名和類的命名一樣
?   枚舉中的內(nèi)容命名需要以改枚舉類型名稱開頭

    typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
     AFNetworkReachabilityStatusUnknown = -1,
     AFNetworkReachabilityStatusNotReachable = 0,
     AFNetworkReachabilityStatusReachableViaWWAN = 1,
     AFNetworkReachabilityStatusReachableViaWiFi = 2
    };

    typedef NS_ENUM(NSInteger ,DrawStyle){
        DrawStyleFreedomLine = 100,
        DrawStyleLine = 1,
        DrawStyleCircle = 2,
        DrawStyleRectangle = 3,
        DrawStyleOval = 4,
        DrawStyleTriangle = 5,
        DrawStyleCurve = 6,
        DrawStyleRubber = 7
    };      


4>代理 Delegate

    Protocol : 使用 delegate 作為后綴

?   類的實例必須為回調(diào)方法的參數(shù)之一(numberOfRowsInSection中的section)
    -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section


?   回調(diào)方法的參數(shù)只有類自己的情況剖踊,方法名要符合實際含義(numberOfSectionsInTableView)
      -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView


?   以類的名字開頭(回調(diào)方法存在兩個以上參數(shù)的情況)以表明此方法是屬于哪個類的(tableView)
    -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


類型標(biāo)示符庶弃、代理名稱轨蛤、尖括號間不留空格
該規(guī)則同樣適用于:類聲明、實例變量和方法聲明每一個delegate都把對應(yīng)的protocol名字帶上虫埂,delegate方法不要亂寫祥山,寫到一塊區(qū)域里面去
@interface MyProtocoledClass : NSObject<NSWindowDelegate> {
@private
 id<MyFancyDelegate> _delegate;
 }
- (void)setDelegate:(id<MyFancyDelegate>)aDelegate;@end
如果類聲明中包含多個protocal,每個protocal占用一行,縮進(jìn)4個字符。 
如: 
 @interface CustomViewController : ViewController<
   AbcDelegate,
   DefDelegate
{ 
... } 

5>block

使用Block時掉伏,內(nèi)容四個空格縮進(jìn)缝呕,“^”后帶有參數(shù)時,參數(shù)與“{”之間有一個空格縮進(jìn)
@property (nonatomic ,copy) void (^colorBlock)(UIColor *);




6>方法的聲明和定義

?   在 - OR + 和返回值之間留 1 個空格,方法名和第一個參數(shù)間不留空格 
- (void)doSomethingWithString:(NSString *)theString 
    {
      ...
      }
  ? 當(dāng)參數(shù)過長時,每個參數(shù)占用一行,以冒號對齊
     - (void)doSomethingWith:(GTMFoo *)theFoo
                        rect:(NSRect)theRect
                    interval:(float)theInterval
        {
        ...
        }

  ? 如果方法名比參數(shù)名短,每個參數(shù)占用一行,至少縮進(jìn)4個字符,且為垂直對齊
    - (void)writeA:(NSString *)firstStr
            withBBBBBBBBBBB:(NSString *)nextStr
            withCCCCCC:(NSString *)lastStr
    {
      ...  
    }


  ? Method與Method之間空一行(官方規(guī)定左括號應(yīng)另起一行)
    - (void)samplePrivateMethod
    {
        ...
    }

    - (void)sampleForIf
    {
        ...
    }




7>使用#pragma Mark - 標(biāo)注一類函數(shù)斧散,便于查找


    8>注釋問題

?   .h和.m 文件注釋:

/* 登陸頁面主頁 ***********************************************************************************************************

  • 類名* 建立日期* 版權(quán)聲明作者模塊描述----------------------------------------------------------------* 修改歷史* 序號 日期 修改人 修改原因12 **********************************************************************************************************
    */
?   類和對象方法注釋:

1 /**
2   * @brief 登錄驗證
3   *
4   * @param personId 用戶名
5   * @param password 密碼
6   * @param complete 執(zhí)行完畢的block
7   *
8   * @return
9   */
10   + (void)loginWithPersonId:(NSString *)personId password:(NSString *)password complete:(void (^)(CheckLogon *result))complete;

?   聲明注釋

@property (nonatomic, strong) Student *student; //進(jìn)行單行注釋
采用//進(jìn)行單行注釋供常。所有邏輯判斷需要添加注釋說明。所有變量鸡捐、常量需要添加注釋說明

對 nil 的檢查
? 僅在有業(yè)務(wù)邏輯需求時檢查 nil,而非為了防止崩潰? 向 nil 發(fā)送消息不會導(dǎo)致系統(tǒng)崩潰,Objective-C 運行時負(fù)責(zé)處理

對 BOOL 陷阱
? 禁止將int直接轉(zhuǎn)換(cast or convert)為BOOL 栈暇。Objective-C中,BOOL 被定義為 unsigned char,這意味著除了 YES (1) 和 NO (0)外它還可以是其他 值。? 將整型值轉(zhuǎn)換為 BOOL 的方法:使用三元運算符返回 YES / NO,或使用位運算符 (&&, ||, !)箍镜。
? 禁止將數(shù)組的大小源祈、指針值或位運算符的結(jié)果轉(zhuǎn)換(cast or convert)為 BOOL,因為該 BOOL 值的結(jié)果取決于整型值的最后一位。? 在Objective-C中,只允許使用BOOL? 如:
// 禁止- (BOOL)isBold {
return [self fontTraits] & NSFontBoldTrait;
}
- (BOOL)isValid {
return [self stringValue];
}
// 推薦- (BOOL)isBold {
return ([self fontTraits] & NSFontBoldTrait) ? YES : NO;
}
- (BOOL)isValid {
return [self stringValue] != nil;
}
- (BOOL)isEnabled {
return [self isValid] && [self isBold];
}
? 禁止直接將 BOOL 和 YES/NO 比較,如:
// 禁止
BOOL great = [foo isGreat]; if (great == YES)...// 推薦
BOOL great = [foo isGreat];
if (great)
...

 常用的快捷方式
    command+r 運行
    command+. 停止 死循環(huán)中用到
    command+b 編譯 編譯程序不運行
    command+z 回退
    command+shift+z 前進(jìn)
    command+a 全選
    command+c v x  復(fù)制 粘貼 剪貼
    command+tab 不同程序之間的切換
    command+ ~ 相同程序之間切換
    command+q 退出
    command + shift + J 快速定位當(dāng)前所在文件位置

更多快捷鍵: http://www.cocoachina.com/ios/20160822/17393.html

iOS團(tuán)隊要求

1 刪除多余的空行 * 所有方法與方法之間空1行 * 所有代碼塊之間空1行
2 刪除多余的注釋 * 刪除注釋掉的代碼 * 刪除沒有意義的注釋
3 刪除多余的方法 * 如果方法沒有使用到色迂,請刪除它 * 如果方法沒有執(zhí)行任何業(yè)務(wù)邏輯香缺,請刪除它或者給出一定注釋
4 刪除未被使用的資源文件
5 添加必要的注釋 * 所有 .h 文件中的property 需要給出注釋 * 所有自定義的方法需要給出注釋 * 比較大的代碼塊需要給出注釋 * 所有代碼中出現(xiàn)的阿拉伯?dāng)?shù)字需要給出注釋 * 程序中出現(xiàn)加密/解密 邏輯的操作地方,需要給出注釋說明過程(無論是系統(tǒng)還是自定義)
6 整體代碼風(fēng)格需要統(tǒng)一 * 代碼后面的”{“ 不需要單獨占用一行 * 邏輯運算符 與 代碼之間空一格 * “#pragma mark -” 與下面的代碼之前不要空行 * 遵循一般性的代碼規(guī)范

寫代碼規(guī)范35條小建議: http://www.reibang.com/p/71fdd1ae714c

    8>注釋問題

?   .h和.m 文件注釋:

/* 登陸頁面主頁 ***********************************************************************************************************

  • 類名* 建立日期* 版權(quán)聲明作者模塊描述----------------------------------------------------------------* 修改歷史* 序號 日期 修改人 修改原因12 **********************************************************************************************************
    */
?   類和對象方法注釋:

1 /**
2   * @brief 登錄驗證
3   *
4   * @param personId 用戶名
5   * @param password 密碼
6   * @param complete 執(zhí)行完畢的block
7   *
8   * @return
9   */
10   + (void)loginWithPersonId:(NSString *)personId password:(NSString *)password complete:(void (^)(CheckLogon *result))complete;

    ?   聲明注釋
`
@property (nonatomic, strong) Student *student; //進(jìn)行單行注釋`
采用//進(jìn)行單行注釋歇僧。所有邏輯判斷需要添加注釋說明图张。所有變量、常量需要添加注釋說明


對 nil 的檢查 
? 僅在有業(yè)務(wù)邏輯需求時檢查 nil,而非為了防止崩潰? 向 nil 發(fā)送消息不會導(dǎo)致系統(tǒng)崩潰,Objective-C 運行時負(fù)責(zé)處理 


對 BOOL 陷阱 
? 禁止將int直接轉(zhuǎn)換(cast or convert)為BOOL 诈悍。Objective-C中,BOOL 被定義為 unsigned char,這意味著除了 YES (1) 和 NO (0)外它還可以是其他 值祸轮。? 將整型值轉(zhuǎn)換為 BOOL 的方法:使用三元運算符返回 YES / NO,或使用位運算符 (&&, ||, !)。 
? 禁止將數(shù)組的大小侥钳、指針值或位運算符的結(jié)果轉(zhuǎn)換(cast or convert)為 BOOL,因為該 BOOL 值的結(jié)果取決于整型值的最后一位适袜。? 在Objective-C中,只允許使用BOOL? 如: 

// 禁止- (BOOL)isBold {
return [self fontTraits] & NSFontBoldTrait;
}
- (BOOL)isValid {
return [self stringValue];
}
// 推薦- (BOOL)isBold {
return ([self fontTraits] & NSFontBoldTrait) ? YES : NO;
}
- (BOOL)isValid {
return [self stringValue] != nil;
}
- (BOOL)isEnabled {
return [self isValid] && [self isBold];
}
? 禁止直接將 BOOL 和 YES/NO 比較,如:
// 禁止
BOOL great = [foo isGreat]; if (great == YES)...// 推薦
BOOL great = [foo isGreat];
if (great)
...




     常用的快捷方式
        command+r 運行
        command+. 停止 死循環(huán)中用到
        command+b 編譯 編譯程序不運行
        command+z 回退
        command+shift+z 前進(jìn)
        command+a 全選
        command+c v x  復(fù)制 粘貼 剪貼
        command+tab 不同程序之間的切換
        command+ ~ 相同程序之間切換
        command+q 退出
        command + shift + J 快速定位當(dāng)前所在文件位置

[更多快捷鍵](http://www.cocoachina.com/ios/20160822/17393.htm)



----


iOS團(tuán)隊要求

1 刪除多余的空行     * 所有方法與方法之間空1行     * 所有代碼塊之間空1行
2 刪除多余的注釋    * 刪除注釋掉的代碼     * 刪除沒有意義的注釋
3 刪除多余的方法     * 如果方法沒有使用到,請刪除它     * 如果方法沒有執(zhí)行任何業(yè)務(wù)邏輯慕趴,請刪除它或者給出一定注釋
4 刪除未被使用的資源文件
5 添加必要的注釋     * 所有 .h 文件中的property 需要給出注釋     * 所有自定義的方法需要給出注釋     * 比較大的代碼塊需要給出注釋     * 所有代碼中出現(xiàn)的阿拉伯?dāng)?shù)字需要給出注釋     * 程序中出現(xiàn)加密/解密 邏輯的操作地方珍策,需要給出注釋說明過程(無論是系統(tǒng)還是自定義)
6 整體代碼風(fēng)格需要統(tǒng)一     * 代碼后面的”{“ 不需要單獨占用一行     * 邏輯運算符 與 代碼之間空一格     * “#pragma mark -” 與下面的代碼之前不要空行     * 遵循一般性的代碼規(guī)范


[寫代碼規(guī)范35條小建議](http://www.reibang.com/p/71fdd1ae714c)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葱淳,一起剝皮案震驚了整個濱河市诺苹,隨后出現(xiàn)的幾起案子牢屋,更是在濱河造成了極大的恐慌,老刑警劉巖耙册,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件给僵,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帝际,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蔓同,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹲诀,你說我怎么就攤上這事斑粱。” “怎么了脯爪?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵则北,是天一觀的道長。 經(jīng)常有香客問我痕慢,道長尚揣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任掖举,我火速辦了婚禮快骗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘塔次。我一直安慰自己方篮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布俺叭。 她就那樣靜靜地躺著恭取,像睡著了一般泰偿。 火紅的嫁衣襯著肌膚如雪熄守。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天耗跛,我揣著相機(jī)與錄音裕照,去河邊找鬼。 笑死调塌,一個胖子當(dāng)著我的面吹牛晋南,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播羔砾,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼负间,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姜凄?” 一聲冷哼從身側(cè)響起政溃,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎态秧,沒想到半個月后董虱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年愤诱,在試婚紗的時候發(fā)現(xiàn)自己被綠了云头。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡淫半,死狀恐怖溃槐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情科吭,我是刑警寧澤竿痰,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站砌溺,受9級特大地震影響影涉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜规伐,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一蟹倾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猖闪,春花似錦鲜棠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吵护,卻和暖如春盒音,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馅而。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工祥诽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓮恭。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓雄坪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屯蹦。 傳聞我的和親對象是個殘疾皇子维哈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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