<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-193  評(píng)論-715  文章-1  trackbacks-0

    版權(quán)聲明

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

     

    版本 1.1 發(fā)表于2010-03-08

     

     口訣與范式

    1           口訣。

    1.1          誰(shuí)創(chuàng)建,誰(shuí)釋放(類似于“誰(shuí)污染,誰(shuí)治理”)。如果你通過(guò)allocnewcopy來(lái)創(chuàng)建一個(gè)對(duì)象,那么你必須調(diào)用releaseautorelease。換句話說(shuō),不是你創(chuàng)建的,就不用你去釋放。
    例如,你在一個(gè)函數(shù)中alloc生成了一個(gè)對(duì)象,且這個(gè)對(duì)象只在這個(gè)函數(shù)中被使用,那么你必須在這個(gè)函數(shù)中調(diào)用releaseautorelease。如果你在一個(gè)class的某個(gè)方法中alloc一個(gè)成員對(duì)象,且沒(méi)有調(diào)用autorelease,那么你需要在這個(gè)類的dealloc方法中調(diào)用release;如果調(diào)用了autorelease,那么在dealloc方法中什么都不需要做。

    1.2          除了allocnewcopy之外的方法創(chuàng)建的對(duì)象都被聲明了autorelease

    1.3          誰(shuí)retain,誰(shuí)release。只要你調(diào)用了retain,無(wú)論這個(gè)對(duì)象是如何生成的,你都要調(diào)用release。有時(shí)候你的代碼中明明沒(méi)有retain,可是系統(tǒng)會(huì)在默認(rèn)實(shí)現(xiàn)中加入retain。不知道為什么蘋(píng)果公司的文檔沒(méi)有強(qiáng)調(diào)這個(gè)非常重要的一點(diǎn),請(qǐng)參考范式2.7和第三章。

    2           范式。
    范式就是模板,就是依葫蘆畫(huà)瓢。由于不同人有不同的理解和習(xí)慣,我總結(jié)的范式不一定適合所有人,但我能保證照著這樣做不會(huì)出問(wèn)題。

    2.1          創(chuàng)建一個(gè)對(duì)象。

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

    2.2          創(chuàng)建一個(gè)autorelease的對(duì)象。

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

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

    [obj1 release];

    obj1 = nil;

    2.4          指針賦值給另一個(gè)指針。

    ClassA *obj2 = obj1;

    [obj2 retain];

    //do something

    [obj2 release];

    obj2 = nil;

    2.5          在一個(gè)函數(shù)中創(chuàng)建并返回對(duì)象,需要把這個(gè)對(duì)象設(shè)置為autorelease

    ClassA *Func1()

    {

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

      return obj;

    }

    2.6          在子類的dealloc方法中調(diào)用基類的dealloc方法

    -(void) dealloc

    {

             

             [super dealloc];

    }

    2.7          在一個(gè)class中創(chuàng)建和使用property

    2.7.1     聲明一個(gè)成員變量。

    ClassB *objB;

    2.7.2     聲明property,加上retain參數(shù)。

    @property (retain) ClassB* objB;

    2.7.3     定義property。(property的默認(rèn)實(shí)現(xiàn)請(qǐng)看第三章)

    @synthesize objB;

    2.7.4     除了dealloc方法以外,始終用.操作符的方式來(lái)調(diào)用property

    self.objB 或者objA.objB

    2.7.5     dealloc方法中release這個(gè)成員變量。

    [objB release];

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

    @interface ClassA : NSObject

    {

             ClassB* objB;

    }

     

    @property (retain) ClassB* objB;

    @end

     

    @implementation ClassA

    @synthesize objB;

    -(void) dealloc

    {

             [objB release];

             [super dealloc];

    }

    @end

    2.7.6     給這個(gè)property賦值時(shí),有手動(dòng)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

    @import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
    posted on 2011-12-01 09:25 Robin's Programming World 閱讀(829) 評(píng)論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載
    主站蜘蛛池模板: 国产人成免费视频网站| 色噜噜狠狠色综合免费视频| 欧洲乱码伦视频免费国产| 妞干网手机免费视频| 亚洲国产精品综合久久2007| 无码人妻一区二区三区免费n鬼沢| 久久精品九九亚洲精品天堂| 中文字幕在线免费播放| 亚洲无线码一区二区三区| 一级毛片免费不卡| 亚洲无码高清在线观看| 国产免费区在线观看十分钟| 亚洲精品无码MV在线观看 | 精品免费久久久久国产一区| 亚洲综合在线视频| 9420免费高清在线视频| 亚洲电影唐人社一区二区| 无码区日韩特区永久免费系列| 亚洲成AV人在线观看天堂无码| 日韩精品无码区免费专区| 中中文字幕亚洲无线码| 国产黄色片在线免费观看| 特黄特色大片免费| 亚洲精品人成电影网| 337p日本欧洲亚洲大胆裸体艺术| 国产在线一区二区综合免费视频| 亚洲视频在线观看网站| 免费精品国产自产拍在| 国产大片免费天天看| 亚洲人成亚洲精品| 成年人在线免费观看| 特级毛片A级毛片免费播放| 亚洲性色高清完整版在线观看| 亚洲日本va午夜中文字幕久久| 久久精品a一国产成人免费网站| 久草免费福利资源站| 亚洲中文字幕无码爆乳| 亚洲第一区精品观看| 免费av片在线观看网站| 国产精品亚洲综合| 亚洲日本va午夜中文字幕一区|