• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            f(sixleaves) = sixleaves

            重劍無鋒 大巧不工

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
            main.m

             1 //
             2 //  main.m
             3 //  便利構造器與autorelease
             4 //
             5 //  Created by sixleaves on 15/5/10.
             6 //  Copyright (c) 2015年 itcast. All rights reserved.
             7 //
             8 
             9 #import <Foundation/Foundation.h>
            10 #import "Person.h"
            11 #import "GoodPerson.h"
            12 int main(int argc, const char * argv[]) {
            13     @autoreleasepool {
            14         
            15         
            16         Person *p1 = [Person person];
            17         p1.age = 100;
            18         
            19         GoodPerson * p2 = [GoodPerson personWithAge: 150];
            20         
            21         // p2實際上指向的是Person
            22         p2.money = 300;
            23         
            24         //NSLog(@"test");
            25         
            26         /*
            27          代碼分析:
            28          GoodPerson類調用了personWithAge,所以根據誰調用我,self就指向誰這個原則。
            29          self指向GoodPerson類。GoodPerson中沒有這個方法,就只能到父類中找,到父類
            30          中找到了又調用[self person],GoodPerson中又沒有這個方法,于是又找父類,找到后,創建是已經autorelease的Person對象。而不是GoodPerson對象。此時我們只需改掉person方法中寫死的[Person alloc]換成self alloc就可以,為什么呢。因為self此時指向的是子類,所以創建出來的就是子類。
            31          
            32          對于GoodPerson,并沒有重寫自己的dealloc方法,所以調用的時候,在GoodPerson中找不到,就去其父類Person中找,找到了后,調用了Person得dealloc方法。
            33          */
            34         
            35 
            36     }
            37     return 0;
            38 }
            39 
            40 /*
            41  便利構造器的概念:
            42  1.開發中,我們經常會提供一些類方法,快速創建一個已經autorelease的對象。(便利構造器\便利構造方法)
            43  便利構造器與self:
            44  1.在便利構造器中,盡量使用self代替類名。(或者self class).這能讓子類調用時候創造出來的就是子類對象。
            45  */
            46 

            Person.h
             1 //
             2 //  Person.h
             3 //  便利構造器與autorelease
             4 //
             5 //  Created by sixleaves on 15/5/10.
             6 //  Copyright (c) 2015年 itcast. All rights reserved.
             7 //
             8 
             9 #import <Foundation/Foundation.h>
            10 
            11 @interface Person : NSObject
            12 
            13 @property (nonatomic, assign) int age;
            14 
            15 // 遍歷構造器
            16 
            17 + (id)person;
            18 
            19 + (id)personWithAge:(int)age;
            20 
            21 @end
            22 
            Person.m
             1 //
             2 //  Person.m
             3 //  便利構造器與autorelease
             4 //
             5 //  Created by sixleaves on 15/5/10.
             6 //  Copyright (c) 2015年 itcast. All rights reserved.
             7 //
             8 
             9 #import "Person.h"
            10 
            11 @implementation Person
            12 
            13 // 便利構造器與autorelease
            14 /*
            15  便利構造器的規范:
            16  1.必須是類方法,
            17  2.返回類型是id
            18  3.必須以類名With開頭(帶參數一般還要有With),區別之一是便利構造器必須是小寫駱駝峰,而類名是大寫的。
            19  
            20  */
            21 
            22 + (id)person
            23 {
            24     // return [[[Person alloc] init] autorelease]會導致子類調用personWithAge、person創建的都是已經autorelease的Person對象
            25     // 而不是想要的子類對象。換成self就可解決,具體分析看代碼分析。
            26     return [[[self alloc] init] autorelease];
            27 }
            28 
            29 + (id)personWithAge:(int)age
            30 {
            31     Person *p = [self person];
            32     p.age = age;
            33     return p;
            34 }
            35 
            36 - (void)dealloc
            37 {
            38     NSLog(@"%d歲的對象被銷毀了~~~", _age);
            39     [super dealloc];
            40 }
            41 
            42 @end
            43 

            GoodPerson.h
             1 //
             2 //  GoodPerson.h
             3 //  便利構造器與autorelease
             4 //
             5 //  Created by sixleaves on 15/5/10.
             6 //  Copyright (c) 2015年 itcast. All rights reserved.
             7 //
             8 
             9 #import "Person.h"
            10 
            11 @interface GoodPerson : Person
            12 
            13 @property (nonatomic, assign) int money;
            14 
            15 @end
            16 
            GoodPerson.m 1 //
             2 //  GoodPerson.m
             3 //  便利構造器與autorelease
             4 //
             5 //  Created by sixleaves on 15/5/10.
             6 //  Copyright (c) 2015年 itcast. All rights reserved.
             7 //
             8 
             9 #import "GoodPerson.h"
            10 
            11 @implementation GoodPerson
            12 
            13 - (void)dealloc
            14 {
            15     
            16     NSLog(@"GoodPerson-dealloc");
            17     [super dealloc];
            18 }
            19 
            20 @end
            21 
            posted on 2015-05-10 19:35 swp 閱讀(221) 評論(0)  編輯 收藏 引用 所屬分類: objective-c
            久久影视国产亚洲| 久久午夜夜伦鲁鲁片免费无码影视| 国产A三级久久精品| 亚洲国产精品久久久天堂| 久久精品国产亚洲AV大全| 国产亚洲美女精品久久久久狼| 国产成人精品久久| A级毛片无码久久精品免费| 久久精品国产网红主播| 无码精品久久一区二区三区| 777米奇久久最新地址| 热久久视久久精品18| www久久久天天com| 精品伊人久久大线蕉色首页| 伊人久久大香线焦综合四虎| 久久中文字幕人妻丝袜| 情人伊人久久综合亚洲| 国内精品综合久久久40p| 99久久国产热无码精品免费久久久久| 久久久久久国产a免费观看不卡 | 久久精品人人槡人妻人人玩AV| 久久国产精品视频| 91精品国产91久久综合| 精品多毛少妇人妻AV免费久久 | 久久夜色精品国产亚洲| 伊人久久大香线蕉av不卡| 欧美久久亚洲精品| 国产精品熟女福利久久AV| 狠色狠色狠狠色综合久久| av色综合久久天堂av色综合在| 亚洲国产成人久久笫一页| 久久久久久国产精品无码下载| 精品久久久久久亚洲| 97久久精品国产精品青草| 少妇高潮惨叫久久久久久| 一本一本久久A久久综合精品| 久久青青国产| 久久夜色精品国产亚洲| 久久亚洲日韩看片无码| 狠狠色综合网站久久久久久久高清| 午夜精品久久久久久影视riav|