Objective-C内存管理教程和原理剖析(三)

Objective-C内存管理教程和原理剖析(三)

2013-04-11 14:32 zakowey oschina 字号: T | T
一键收藏,随时查看,分享好友!

初学Objective-C的朋友都有一个困惑,总觉得对Objective-C的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对Objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有所帮助,也欢迎大家一起探讨。

AD:2014WOT全球软件技术峰会北京站 课程视频发布


    @property (retain)和@synthesize的默认实现

    在这里解释一下@property (retain) ClassB* objB;和@synthesize objB;背后到底发生了什么(retain property的默认实现)。property实际上是getter和setter,针对有retain参数的property,背后的实现如下(请参考附件中的memman-getter-setter.m,你会发现,结果和memman-property.m一样):

       
       
    1. @interface ClassA : NSObject
    2. {
    3. ClassB *objB;
    4. }
    5. -(ClassB *) getObjB;
    6. -(void) setObjB:(ClassB *) value;
    7. @end
    8. @implementation ClassA
    9. -(ClassB*) getObjB
    10. {
    11. return objB;
    12. }
    13. -(void) setObjB:(ClassB*) value
    14. {
    15. if (objB != value)
    16. {
    17. [objB release];
    18. objB = [value retain];
    19. }
    20. }

    在setObjB中,如果新设定的值和原值不同的话,必须要把原值对象release一次,这样才能保证retain count是正确的。

    由于我们在class内部retain了一次(虽然是默认实现的),所以我们要在dealloc方法中release这个成员变量。

       
       
    1. -(void) dealloc
    2. {
    3. [objB release];
    4. [super dealloc];
    5. }
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值