如果我有一个包含另一个对象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会导致任何问题吗?
答案 0 :(得分:1)
这取决于您存储i
的方式。如果您在initWithItem:
中复制或保留它,则需要使用Sale
的{{1}}方法将其发布(请参阅下文)。如果你要存储一个弱引用,这很好。
dealloc
有关详细信息,请参阅Apple的Memory Management Programming Guide。