• <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>

            厚積薄發,滴水穿石

            搬家到主站了:http://www.cnblogs.com/cokecoffe/
            隨筆 - 45, 文章 - 8, 評論 - 12, 引用 - 0
            數據加載中……

            iPhone/Mac Objective-C內存管理教程和原理剖析(二)口訣與范式

            版權聲明

            此文版權歸作者Vince Yuan (vince.yuan#gmail.com)所有。歡迎非營利性轉載,轉載時必須包含原始鏈接http://vinceyuan.cnblogs.com,且必須包含此版權聲明的完整內容。

             

            版本 1.1 發表于2010-03-08

             

             口訣與范式

            1           口訣。

            1.1          誰創建,誰釋放(類似于“誰污染,誰治理”)。如果你通過allocnewcopy來創建一個對象,那么你必須調用releaseautorelease。換句話說,不是你創建的,就不用你去釋放。
            例如,你在一個函數中alloc生成了一個對象,且這個對象只在這個函數中被使用,那么你必須在這個函數中調用releaseautorelease。如果你在一個class的某個方法中alloc一個成員對象,且沒有調用autorelease,那么你需要在這個類的dealloc方法中調用release;如果調用了autorelease,那么在dealloc方法中什么都不需要做。

            1.2          除了allocnewcopy之外的方法創建的對象都被聲明了autorelease

            1.3          retain,誰release。只要你調用了retain,無論這個對象是如何生成的,你都要調用release。有時候你的代碼中明明沒有retain,可是系統會在默認實現中加入retain。不知道為什么蘋果公司的文檔沒有強調這個非常重要的一點,請參考范式2.7和第三章。

            2           范式。
            范式就是模板,就是依葫蘆畫瓢。由于不同人有不同的理解和習慣,我總結的范式不一定適合所有人,但我能保證照著這樣做不會出問題。

            2.1          創建一個對象。

            ClassA *obj1 = [[ClassA alloc] init];

            2.2          創建一個autorelease的對象。

            ClassA *obj1 = [[[ClassA alloc] init] autorelease];

            2.3          Release一個對象后,立即把指針清空。(順便說一句,release一個空指針是合法的,但不會發生任何事情)

            [obj1 release];

            obj1 = nil;

            2.4          指針賦值給另一個指針。

            ClassA *obj2 = obj1;

            [obj2 retain];

            //do something

            [obj2 release];

            obj2 = nil;

            2.5          在一個函數中創建并返回對象,需要把這個對象設置為autorelease

            ClassA *Func1()

            {

              ClassA *obj = [[[ClassA alloc]init]autorelease];

              return obj;

            }

            2.6          在子類的dealloc方法中調用基類的dealloc方法

            -(void) dealloc

            {

                     …

                     [super dealloc];

            }

            2.7          在一個class中創建和使用property

            2.7.1     聲明一個成員變量。

            ClassB *objB;

            2.7.2     聲明property,加上retain參數。

            @property (retain) ClassB* objB;

            2.7.3     定義property。(property的默認實現請看第三章)

            @synthesize objB;

            2.7.4     除了dealloc方法以外,始終用.操作符的方式來調用property

            self.objB 或者objA.objB

            2.7.5     dealloc方法中release這個成員變量。

            [objB release];

            示例代碼如下(詳細代碼請參考附件中的memman-property.m,你需要特別留意對象是在何時被銷毀的。):

            @interface ClassA : NSObject

            {

                     ClassB* objB;

            }

             

            @property (retain) ClassB* objB;

            @end

             

            @implementation ClassA

            @synthesize objB;

            -(void) dealloc

            {

                     [objB release];

                     [super dealloc];

            }

            @end

            2.7.6     給這個property賦值時,有手動releaseautorelease兩種方式。

            void funcNoAutorelease()

            {

                     ClassB *objB1 = [[ClassB alloc]init];

                     ClassA *objA = [[ClassA alloc]init];

                     objA.objB = objB1;

                     [objB1 release];

                     [objA release];

            }

             

            void funcAutorelease()

            {

                     ClassB *objB1 = [[[ClassB alloc]init] autorelease];

                     ClassA *objA = [[[ClassA alloc]init] autorelease];

                     objA.objB = objB1;

            }

             

             

            示例代碼文件鏈接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip

            posted on 2011-12-07 21:48 Wangkeke 閱讀(227) 評論(0)  編輯 收藏 引用 所屬分類: Iphone development

            国产福利电影一区二区三区久久久久成人精品综合 | 国产精品成人99久久久久91gav| 精品人妻久久久久久888| 久久天堂AV综合合色蜜桃网| 狠狠色婷婷综合天天久久丁香 | 国内精品九九久久久精品| 人妻精品久久久久中文字幕69| 国产V亚洲V天堂无码久久久| 久久WWW免费人成—看片| 亚洲精品白浆高清久久久久久 | 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久AAAA片一区二区| 奇米影视7777久久精品人人爽| 2021精品国产综合久久| 99久久国产宗和精品1上映 | 国产精品国色综合久久| 亚洲国产精品婷婷久久| 国产精品久久久久aaaa| 久久青青草视频| 九九热久久免费视频| 亚洲精品乱码久久久久久中文字幕| 97精品国产97久久久久久免费| 亚洲午夜久久久久久久久久| 久久久久久国产a免费观看不卡| 丰满少妇高潮惨叫久久久| 亚洲?V乱码久久精品蜜桃| 国产精品成人无码久久久久久| 国产精品禁18久久久夂久 | 无码8090精品久久一区| 国产一区二区三区久久| 久久无码人妻一区二区三区 | 亚洲国产成人乱码精品女人久久久不卡 | 亚洲欧美精品伊人久久| 精品久久久久久久无码| 久久亚洲精品成人AV| 亚洲国产精品无码久久久秋霞2| 久久亚洲AV成人无码| 国产精品一区二区久久精品涩爱 | 亚洲伊人久久综合影院| 亚洲Av无码国产情品久久| 欧美激情精品久久久久久久|