在Objective-C中释放对象的正确方法

时间:2011-03-30 05:52:52

标签: objective-c memory-management

如果我有一个包含另一个对象Item的对象Sale。假设我的Sale标题如下所示:

    #import <Foundation/Foundation.h>
    #import "Item.h"

    @interface Sale : NSObject {
        Item *item;
    }

    @property (readonly) Item *item;

    -(id) initWithItem:(Item*)i;

    @end

在我的函数中,我创建了一个新的Item和Sale对象:

    Item *i = [[Item alloc] init];
    Sale *s = [[Sale alloc] initWithItem:i];
    [i release];

如果,当我完成Sale对象时,我只会这样做:

    [s release];

是否足以确保所有内存分配都得到有效清理?

此外,如果我稍后尝试访问[s项目],会发布* i会导致任何问题吗?

1 个答案:

答案 0 :(得分:1)

这取决于您存储i的方式。如果您在initWithItem:中复制或保留它,则需要使用Sale的{​​{1}}方法将其发布(请参阅下文)。如果你要存储一个弱引用,这很好。

dealloc

有关详细信息,请参阅Apple的Memory Management Programming Guide