Objective-C 學(xué)習(xí)第五天

一奋献、

  1. 創(chuàng)建一個(gè)對(duì)象,內(nèi)存是如何分配
    1). 子類對(duì)象中有自己的屬性和所有父類的屬性
    2). 代碼段中每一個(gè)類都有一個(gè)isa指針灾搏,這個(gè)指針指向它的父類.

  2. 結(jié)構(gòu)體與類

    1. 相同點(diǎn): 都可以將多個(gè)數(shù)據(jù)封裝為1個(gè)整體
        struct Data{
            int year;
            int month;
            int day;
        }
    
        @interface Data : NSObject{
            int year;
            int month;
            int day;
        }
    

    2). 不同點(diǎn):
    a. 結(jié)構(gòu)體只能封裝數(shù)據(jù)漂羊,而類不僅可以封裝數(shù)據(jù)還可以封裝行為
    b. 結(jié)構(gòu)體變量分配在椈空間(前提是局部變量),而對(duì)象分配在堆空間.
    椄刻空間相對(duì)較小,但是訪問效率高;
    堆空間較大, 訪問效率低.

    3). 應(yīng)用場(chǎng)景:
    a. 如果表示的實(shí)體不僅有數(shù)據(jù)還有行為,只能使用類
    b. 如果表示的實(shí)體只有數(shù)據(jù), 沒有行為磁椒,視屬性多少而定.如果屬性只有幾個(gè),就定義為結(jié)構(gòu)體; 如果屬性較多玫芦,就定義為類.

  3. 類的本質(zhì)


    BSS段
    數(shù)據(jù)段
    代碼段


    內(nèi)存.png

    代碼段是用來存儲(chǔ)代碼的.
    類加載浆熔,當(dāng)類第一次被訪問的時(shí)候,這個(gè)類就會(huì)被加載到代碼段存儲(chǔ)起來.
    類一旦被加載桥帆,是不會(huì)被回收的医增,除非程序結(jié)束.

    1). 任何存儲(chǔ)在內(nèi)存中的數(shù)據(jù)都有1個(gè)數(shù)據(jù)類型.
    2). 在代碼段存儲(chǔ)類的步驟
    a. 先在代碼段中創(chuàng)建Class對(duì)象, Class是Foundation框架中的一個(gè)類
    b. 將類的信息存儲(chǔ)在這個(gè)Class對(duì)象之中
    Class對(duì)象至少有三個(gè)屬性:
    類名/屬性s/方法s
    存儲(chǔ)類的這個(gè)Class對(duì)象,叫做類對(duì)象
    所以存儲(chǔ)類的類對(duì)象也有一個(gè)isa指針

  4. 類對(duì)象使用
    1). 調(diào)用類的類方法class,就可以了得到存儲(chǔ)類的類對(duì)象的地址
    Class c1 = [Person class];
    2). 調(diào)用對(duì)象的對(duì)象方法老虫,就可以了得到這個(gè)對(duì)象所屬的類的Class對(duì)象的地址.
    Person p1 = [Person new];
    Class c2 = [p1 class];
    注意: 聲明Class指針的時(shí)候叶骨,不需要加
    ,因?yàn)閠ypedef的時(shí)候就已經(jīng)加*了.
    3). 拿到存儲(chǔ)類的類對(duì)象以后
    Class c1 = [Person class];
    c1對(duì)象就是Person類, c1 完全等價(jià)于Person
    a. 使用類對(duì)象來調(diào)用類的類方法,
    Class c1 = [Person class];
    [c1 sayHi] 等價(jià)于 [Person sayHi];
    b. 創(chuàng)建對(duì)象
    Class c1 = [Person class];
    [c1 new] 等價(jià)于 [Person new];

    1. 注意: 使用類對(duì)象祈匙,只能調(diào)用類的類方法邓萨,不能調(diào)用對(duì)象方法
  5. SEL全程 select 選擇器
    SEL是一個(gè)數(shù)據(jù)類型. 要在內(nèi)存中申請(qǐng)空間存儲(chǔ)數(shù)據(jù),SEL其實(shí)是一個(gè)類,SEL對(duì)象用來存儲(chǔ)一個(gè)方法
    1). 類是以Class對(duì)象的形式存儲(chǔ)在代碼段中
    類名: 存儲(chǔ)這個(gè)類的類名.NSString
    a. 如何將方法存儲(chǔ)在類對(duì)象之中
    a). 先創(chuàng)建一個(gè)SEL對(duì)象
    b). 將方法的信息存儲(chǔ)在這個(gè)SEL對(duì)象之中
    c). 再將這個(gè)SEL作為Class對(duì)象的屬性
    2). 拿到存儲(chǔ)方法的SEL對(duì)象
    a. 因?yàn)镾EL是typedef類型的菊卷,在自定義的時(shí)候已經(jīng)加了,所以聲明SEL指針的時(shí)候不需要加
    b. 取到存儲(chǔ)方法的SEL對(duì)象
    SEL s1 = @selector(方法名);
    示例:
    SEL s1 = @selector(sayHi);
    3). 調(diào)用方法的本質(zhì)
    Person p1 = [Person new];
    [p1 sayHi];
    內(nèi)部原理:
    a. 先拿到存儲(chǔ)sayHi方法的SEL對(duì)象宝剖,也就是拿到sayHi方法的SEL數(shù)據(jù)洁闰,SEL消息
    b. 將這個(gè)SEL消息發(fā)送給p1對(duì)象
    c. p1對(duì)象接收到這個(gè)SEL消息之后,就知道調(diào)用方法
    d. 根據(jù)對(duì)象的isa指針找到存儲(chǔ)類的類對(duì)象
    e. 如果找到這個(gè)類對(duì)象之后万细,搜尋是否有和傳入的SEL數(shù)據(jù)相匹配的扑眉,如果有,就執(zhí)行赖钞,如果乜有就找父類腰素,知道NSObject
    OC最重要的1個(gè)機(jī)制: 消息機(jī)制
    調(diào)用方法的本質(zhì)其實(shí)就是為對(duì)象發(fā)送SEL消息
    [p1 sayHi]: 為p1對(duì)象發(fā)送一個(gè)sayHi方法
    4). 手動(dòng)為對(duì)象發(fā)送SEL消息
    a. 先得到方法的SEL數(shù)據(jù)
    b. 把這個(gè)SEL數(shù)據(jù)發(fā)送給p1對(duì)象
    - (id)performSelector:(SEL)aSelector;
    示例:
    Person *p1 = [Person new]; SEL s1 = @selector(sayHi); [p1 performSelector:sel];
    c. 調(diào)用一個(gè)對(duì)象的方法有兩種
    a). [對(duì)象名 方法名];
    b). 手動(dòng)的為對(duì)象發(fā)送SEL消息
    5). 注意事項(xiàng):
    a. 如果方法名有參數(shù) 那么方法名是帶了參數(shù)的
    b. 如果方法有參數(shù),就調(diào)用另外一個(gè)方法
    - (id)performSelector:(SEL)aSelector withObject:(id)object;
    c. 如果方法有多個(gè)參數(shù)雪营,就將對(duì)象傳遞過去

  6. 點(diǎn)語法
    OC中也可以使用點(diǎn)語法來訪問對(duì)象的屬性弓千,和Java,C#是完全不一樣的.
    1). 使用點(diǎn)語法訪問對(duì)象的屬性.
    語法:對(duì)象名.去掉下劃線的屬性名
    p1.name = @"jack";這個(gè)時(shí)候就會(huì)將@"jack"賦值給p1對(duì)象的_name屬性; NSString *name = p1.name;把p1對(duì)象的_name屬性值取出來
    2). 點(diǎn)語法原理
    p1.age = 18;
    這句話的本質(zhì)并不是把18直接賦值給p1對(duì)象的_age屬性,點(diǎn)語法在編譯器編譯的時(shí)候献起,會(huì)將點(diǎn)語法轉(zhuǎn)換為調(diào)用setter/getter的代碼
    a. 當(dāng)使用點(diǎn)語法賦值的時(shí)候洋访,這個(gè)時(shí)候編譯器會(huì)將點(diǎn)語法轉(zhuǎn)換為調(diào)用setter方法的代碼.
    對(duì)象名.去掉下劃線的屬性名 = 數(shù)據(jù);
    轉(zhuǎn)換為:
    [對(duì)象名 set去掉下劃線的屬性名首字母大寫] = 數(shù)據(jù);
    p1.age = 10相當(dāng)于[p1 setAge:10];
    b. 當(dāng)使用點(diǎn)語法取值的時(shí)候镣陕,這個(gè)時(shí)候編譯器會(huì)將點(diǎn)語法轉(zhuǎn)換為調(diào)用getter方法的代碼.
    對(duì)象名.去掉下劃線的屬性名;
    轉(zhuǎn)換為:
    [對(duì)象名 去掉下劃線的屬性名];
    int age = p1.ag相當(dāng)于[p1 age];
    3). 注意:
    a. 在getter/setter方法中慎用點(diǎn)語法, 因?yàn)橛锌赡軙?huì)造成無線遞歸導(dǎo)致程序崩潰
    b. 點(diǎn)語法在編譯器編譯的時(shí)候會(huì)轉(zhuǎn)換為setter/getter方法的代碼.
    如果我們的setter和getter方法名不符合規(guī)范,那么就會(huì)報(bào)錯(cuò).
    c. 如果屬性沒有封裝getter/setter是無法使用點(diǎn)語法的

  7. @property
    1). 寫一個(gè)類
    a. 寫屬性
    b. 聲明屬性的getter/setter
    c. 再實(shí)現(xiàn)getter/setter
    2). @property
    a. 作用: 自動(dòng)生成getter/setter的聲明姻政,應(yīng)該寫在@interface聲明之中
    b. 語法:
    @property 數(shù)據(jù)類型 變量名;
    @property int age;
    c. 原理:
    編譯器在編譯的時(shí)候呆抑,會(huì)根據(jù)@property生成getter/setter方法的實(shí)現(xiàn)
    @property 數(shù)據(jù)類型 名稱;
    生成為:
    - (void)set首字母大寫的名稱:參數(shù);
    - (數(shù)據(jù)類型)名稱;
    示例:
    @property int age;
    - (void)setAge:(int)age;
    - (int)age;
    3). 使用@property注意:
    a. @property的類型和屬性的類型一致.
    @property的名稱和屬性名稱一致(去掉下劃線).
    b. @property的名稱決定了生成getter和setter方法的名稱.
    @property的數(shù)據(jù)類型決定了生成的getter和setter方法的數(shù)據(jù)類型.
    c. @property只是生成getter和setter方法的聲明,實(shí)現(xiàn)要自己寫.

  8. @synthesize
    1). 作用: 自動(dòng)生成getter/setter方法的實(shí)現(xiàn),應(yīng)該寫在類的實(shí)現(xiàn)當(dāng)中
    2). 語法:
    @synthesize @property名稱;

        // 聲明
        @interface Person : NSObject{
            int _age;
        }
        @property int age;
        @end;
    
        // 實(shí)現(xiàn)
        @implementation Person
        @synthesize age;
        @end
    

    3). @synthesize做的事情
    a. 生成一個(gè)真私有的屬性,屬性的類型和@synthesize對(duì)應(yīng)的@property類型一致汁展,屬性的名字和@synthesize對(duì)應(yīng)的@property名字一致.
    b. 自動(dòng)生成setter方法的實(shí)現(xiàn)
    實(shí)現(xiàn)的方式:將參數(shù)直接賦值給自動(dòng)生成的那個(gè)私有屬性.并且沒有做任何的邏輯驗(yàn)證
    c. 自動(dòng)生成getter方法的實(shí)現(xiàn)
    4). 希望@synthesize不要自動(dòng)生成私有屬性,getter/setter的實(shí)現(xiàn)中操作我們寫好的屬性.
    a. 語法
    @synthesize @property 名稱 = 已經(jīng)存在的屬性名;
    示例: @synthesiez age = _age;
    a). 不會(huì)再生成私有屬性
    b). 直接生成getter/setter的實(shí)現(xiàn).
    setter實(shí)現(xiàn): 把參數(shù)的值直接賦值給指定的屬性.
    getter的實(shí)現(xiàn): 直接返回指定的屬性的值.
    5). 注意:
    a. 如果直接寫一個(gè)@synthesize
    @synthesize name;
    b. 如果指定操作的屬性.
    @synthesize name = _name;
    c. 生成的setter方法實(shí)現(xiàn)中沒有任何邏輯驗(yàn)證,生成的getter方法的實(shí)現(xiàn)中式直接返回屬性的值
    d. 如果要有自己的邏輯驗(yàn)證,需要自己實(shí)現(xiàn).
    6). 批量聲明
    a. 如果多個(gè)@property的類型一致,可以批量聲明.
    @property float height,weight;
    b. @synthesize批量寫, @synthesize name = _name, age = _age;

  9. @property增強(qiáng)
    1). 從4.4之后, 對(duì)@property做了增強(qiáng).
    2). 只需要寫一個(gè)@property鹊碍,編譯器就會(huì)自動(dòng)的生成私有屬性、生成getter/setter的聲明食绿、生成getter/setter的實(shí)現(xiàn).
    3). @property NSString *name;
    a. 自動(dòng)的生成一個(gè)私有屬性, 屬性的類型和@property類型一致侈咕,屬性的名稱和@property的名稱一致,屬性的名稱自動(dòng)的加下劃線
    b. 自動(dòng)的生成getter/setter的聲明
    c. 自動(dòng)的生成getter/setter的實(shí)現(xiàn)
    setter的實(shí)現(xiàn)直接將參數(shù)的值賦值給自動(dòng)生成的私有屬性.
    getter的實(shí)現(xiàn)直接返回私有屬性的值.
    4). 使用注意
    a. @property的類型一定要和屬性的類型一致,名稱要和屬性的名稱一致
    b. 可以批量聲明

  10. 動(dòng)態(tài)類型和靜態(tài)類型
    1). OC是一門若語言,編譯器在編譯的時(shí)候炫欺,檢查的時(shí)候沒有那么嚴(yán)格.
    優(yōu)點(diǎn):靈活
    缺點(diǎn):太靈活

    強(qiáng)類型的語言: 編譯器在編譯的時(shí)候做語言檢查的時(shí)候乎完,非常嚴(yán)格.
    2).
    a. 靜態(tài)類型:指的是一個(gè)指針指向的對(duì)象是一個(gè)本類對(duì)象,
    b. 動(dòng)態(tài)類型: 指的是一個(gè)指針指向的對(duì)象不是本類對(duì)象品洛。
    3). 編譯檢查:編譯器在編譯的時(shí)候树姨,能不能通過1個(gè)指針去調(diào)用指針指向的對(duì)象的方法.
    判斷原則:看這個(gè)指針?biāo)鶎俚念愋椭惺欠裼羞@個(gè)方法,如果有就認(rèn)為可以調(diào)用桥状,編譯通過,如果沒有就報(bào)錯(cuò)帽揪。
    4). 運(yùn)行檢查: 編譯檢查只是騙過了編譯器,但是這個(gè)方法究竟能不能執(zhí)行還不一定辅斟,運(yùn)行時(shí)會(huì)去檢查對(duì)象當(dāng)中是否有這個(gè)方法

  11. NSObject是OC中所有類的基類,根據(jù)LSP NSObject指針就可以指向任意的OC對(duì)象转晰,所有NSObject指針時(shí)一個(gè)萬能指針.可以指向任意的OC對(duì)象.
    缺點(diǎn): 如果要調(diào)用指向的子類對(duì)象的獨(dú)有的方法,就必須要就類型的強(qiáng)轉(zhuǎn)士飒。

  12. id指針是一個(gè)萬能指針查邢,可以指向任意的OC對(duì)象.
    1). id是一個(gè)typedef類型,在定義的時(shí)候已經(jīng)加了酵幕,所以聲明id指針的時(shí)候就不需要加
    2). id指針是一個(gè)萬能指針扰藕,任意的OC對(duì)象都可以指。
    3). NSObject與id
    相同點(diǎn): 萬能指針芳撒,都可以指向任意的OC對(duì)象
    不同點(diǎn): 通過NSObject指針去調(diào)用對(duì)象的方法的時(shí)候邓深,編譯器會(huì)做編譯檢查.通過id類型的指針去調(diào)用對(duì)象方法的時(shí)候,不會(huì)報(bào)錯(cuò).
    4). 注意:id指針只能調(diào)用方法笔刹,不能使用點(diǎn)語法

  13. instancetype
    1). 如果方法的返回值是instancetype代表方法的返回值是當(dāng)前類的對(duì)象.
    // 聲明 - (instancetype)person; // 實(shí)現(xiàn) - (instancetype)person{ return [self new]; }
    建議:
    a. 如果方法內(nèi)部是在創(chuàng)建當(dāng)前類的對(duì)象芥备,不要寫死成類名[類名 new],而是用self代替類名
    b. 如果方法的返回值是當(dāng)前類的對(duì)象,也不要寫死了舌菜,而是寫instancetype.
    2). id和instancetype的區(qū)別
    a. instancetype只能作為方法的返回值萌壳,不能在其他地方使用,id既可以聲明指針變量也可以作為參數(shù),也可以作為返回值
    b. instancetype是一個(gè)有類型的代表當(dāng)前類的對(duì)象讶凉,id是一個(gè)無類型的指針染乌,僅僅是一個(gè)地址,沒有類型的指針

  14. 構(gòu)造方法
    1). 創(chuàng)建對(duì)象
    類名 *指針名 = [類名 new];
    new 實(shí)際上是個(gè)類方法.
    new方法作用:
    -> 創(chuàng)建對(duì)象
    -> 初始化對(duì)象
    -> 把對(duì)象的地址返回
    new方法的內(nèi)部懂讯,其實(shí)是先調(diào)用alloc方法荷憋,再調(diào)用init方法
    alloc方法是一個(gè)類方法,那個(gè)類調(diào)用這個(gè)方法就創(chuàng)建哪個(gè)類對(duì)象
    init是一個(gè)對(duì)象方法褐望,初始化對(duì)象
    創(chuàng)建對(duì)象的完整步驟:
    應(yīng)該是先使用alloc創(chuàng)建一個(gè)對(duì)象勒庄,然后使用init初始化這個(gè)對(duì)象
    Person *p1 = [Person new];
    完全等價(jià)于
    Person *p1 = [[Person alloc] init];

    2). init方法
    作用: 初始化對(duì)象,為對(duì)象的屬性賦初始值,這個(gè)init方法我們叫做構(gòu)造方法
    init方法做到的事情: 初始化對(duì)象.
    3). 想要讓創(chuàng)建對(duì)象的屬性的默認(rèn)值不是nil,NULL瘫里,0实蔽,那么我們可以重寫init方法.按照我們自己的想法為對(duì)象的屬性賦值.
    重寫init方法規(guī)范:
    a. 必須先調(diào)用父類的init方法.
    b. 調(diào)用方法初始化對(duì)象失敗返回nil
    c. 判斷父類是否初始化成功,如果不是nil,說明初始化成功
    d. 如果初始化成功,就初始化當(dāng)前對(duì)象的屬性
    e. 最后返回self

        - (instancetype)init{
            // 初始化父類屬性的值
            self = [super init];
            if(self){
                self.name = @"jack";
            }
            return self;
        }
    

    4). 自定義構(gòu)造方法
    規(guī)范:
    a. 返回值必須是instancetype
    b. 自定義構(gòu)造方法開頭必須是initWith
    c. 方法的實(shí)現(xiàn)與init的要求一樣

        - (instancetype)initWithName:(NSString *)name{
            // 初始化父類屬性的值
            self = [super init];
            if(self){
                self.name = name;
            }
            return self;
        }
    
        Dog *d1 = [[Dog alloc] initWithName:@"小黃"];
    
  15. 動(dòng)態(tài)類型檢測(cè)
    1). 判斷指針指向的對(duì)象當(dāng)中谨读,指定的方法是否可以調(diào)用

        Person *p1 = [Person new];
        BOOL isHave = [p1 responseToSelector:@selector(setName:)];
    

    2). 判斷類方法是否可以調(diào)用
    3). 判斷對(duì)象是否為指定類對(duì)象或者子類對(duì)象

        NSMutableString *str = [NSMutableString class];
        BOOL res = [str isKindOfClass:[NSString class]];
    

    4). 判斷對(duì)象是否為指定類的對(duì)象(不包括子類)

        NSMutableString *str = [NSMutableString class];
        BOOL res = [str isMemberOfClass:[NSString class]];
    

    5). 判斷指定的類是否為另外一個(gè)類的子類

        BOOL res = [NSMutableString isSubclassOfClass:[NSString 
        class]];
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末局装,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劳殖,更是在濱河造成了極大的恐慌铐尚,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哆姻,死亡現(xiàn)場(chǎng)離奇詭異宣增,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)矛缨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門爹脾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箕昭,你說我怎么就攤上這事灵妨。” “怎么了落竹?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵闷串,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我筋量,道長(zhǎng),這世上最難降的妖魔是什么碉熄? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任桨武,我火速辦了婚禮,結(jié)果婚禮上锈津,老公的妹妹穿的比我還像新娘呀酸。我一直安慰自己,他們只是感情好琼梆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布性誉。 她就那樣靜靜地躺著窿吩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪错览。 梳的紋絲不亂的頭發(fā)上纫雁,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音倾哺,去河邊找鬼轧邪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛羞海,可吹牛的內(nèi)容都是我干的忌愚。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼却邓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼硕糊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腊徙,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤简十,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昧穿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勺远,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年时鸵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胶逢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饰潜,死狀恐怖初坠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彭雾,我是刑警寧澤碟刺,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站薯酝,受9級(jí)特大地震影響半沽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吴菠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一者填、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧做葵,春花似錦占哟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怎燥。三九已至,卻和暖如春蜜暑,著一層夾襖步出監(jiān)牢的瞬間铐姚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工史煎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谦屑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓篇梭,卻偏偏與公主長(zhǎng)得像氢橙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恬偷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • Objective-C 1. import的用法 拷貝文件內(nèi)容可以自動(dòng)防止文件的內(nèi)容被重復(fù)拷貝(#define宏定...
    馬文濤閱讀 5,333評(píng)論 3 17
  • OC基礎(chǔ)總結(jié) 重新回過頭看這些基礎(chǔ)知識(shí)悍手,對(duì)許多知識(shí)點(diǎn)都有新的認(rèn)識(shí),擁有堅(jiān)實(shí)的基礎(chǔ)才能更快的成長(zhǎng)袍患。 #improt ...
    xx_cc閱讀 6,024評(píng)論 10 56
  • 大綱 0.OC數(shù)據(jù)類型 1.聲明一個(gè)類 2.實(shí)現(xiàn)一個(gè)類 3.創(chuàng)建一個(gè)對(duì)象 4.對(duì)象的注意點(diǎn) 5.對(duì)象方法 6.類方...
    天天想念閱讀 1,115評(píng)論 0 3
  • 對(duì)青花瓷有種與生俱來的迷戀诡延,那抹藍(lán)似乎天生便帶著墨香被深深的揉進(jìn)瓷白的肌膚里滞欠,遠(yuǎn)看透著典雅和高貴,近觀是一種端然的...
    時(shí)光散落在人間閱讀 478評(píng)論 4 7
  • 最讓我自豪的事情就是我家很早就有一臺(tái)中華學(xué)習(xí)機(jī)夭谤,現(xiàn)在還讓我記憶猶新的是它除了和APPLE II一樣在32K ROM...
    80s老人閱讀 3,135評(píng)論 1 3