1
如果我有一个包含另一个对象Item的对象Sale。比方说,我的销售标题是这样的:在Objective-C中释放对象的正确方法
#import <Foundation/Foundation.h>
#import "Item.h"
@interface Sale : NSObject {
Item *item;
}
@property (readonly) Item *item;
-(id) initWithItem:(Item*)i;
@end
而在我的函数创建一个新的项目和销售对象,像这样:
Item *i = [[Item alloc] init];
Sale *s = [[Sale alloc] initWithItem:i];
[i release];
如果,当我与销售对象做了我简单地做:
[s release];
是足以确保所有内存分配的有效清理?
此外,如果我稍后尝试访问[s项目],将释放*我会导致任何问题?
如果我只是指定我喜欢这个怎么样?: item = i; – link664 2011-03-30 22:21:15
@ link664在这种情况下,您正在存储一个弱引用:'s'不拥有'i',它只是引用它。因此,如果你在's'之外释放'i'(如你的例子),如果你试图访问'[s item]',你将遇到问题。我建议你在初始化程序中复制/保留'i',并在'dealloc'中释放它。 – 2011-03-30 22:29:44