在Objective-C中释放对象的正确方法
如果我有一个包含其他物品的物品销售。假设我的销售标题如下所示:在Objective-C中释放对象的正确方法,objective-c,memory-management,Objective C,Memory Management,如果我有一个包含其他物品的物品销售。假设我的销售标题如下所示: #import <Foundation/Foundation.h> #import "Item.h" @interface Sale : NSObject { Item *item; } @property (readonly) Item *item; -(id) initWithItem:(Item*)i; @end 如果,当我处理完销售
#import <Foundation/Foundation.h>
#import "Item.h"
@interface Sale : NSObject {
Item *item;
}
@property (readonly) Item *item;
-(id) initWithItem:(Item*)i;
@end
如果,当我处理完销售对象时,我只是:
[s release];
这足以确保有效地清理所有内存分配吗
此外,如果我以后尝试访问[s项],释放*i是否会导致任何问题?这取决于您如何存储
i
。如果您在initWithItem:
中复制或保留它,则需要在Sale
的dealloc
方法中释放它(见下文)。如果您存储的是弱引用,这是可以的
- (id)initWithItem:(Item *)i {
if ((self = [super init])) {
// If you're retaining i here, you need to release it in dealloc.
item = [i retain];
}
return self;
}
- (void)dealloc {
[item release];
[super dealloc];
}
有关更多信息,请参阅苹果的。这取决于您如何存储
i
。如果您在initWithItem:
中复制或保留它,则需要在Sale
的dealloc
方法中释放它(见下文)。如果您存储的是弱引用,这是可以的
- (id)initWithItem:(Item *)i {
if ((self = [super init])) {
// If you're retaining i here, you need to release it in dealloc.
item = [i retain];
}
return self;
}
- (void)dealloc {
[item release];
[super dealloc];
}
有关更多信息,请参阅苹果的。如果我只是指定我喜欢这个,如何?:item=I@link664在这种情况下,您正在存储一个弱引用:
s
不拥有i
,它只是有一个对它的引用。因此,如果您在s
之外释放i
(如您的示例所示),如果您试图访问[s项]
,您将遇到问题。我建议您在初始化器中复制/保留I
,并在dealloc
中释放它。如果我只是分配我喜欢的内容,如何?:item=I@link664在这种情况下,您正在存储一个弱引用:s
不拥有i
,它只是有一个对它的引用。因此,如果您在s
之外释放i
(如您的示例所示),如果您试图访问[s项]
,您将遇到问题。我建议您在初始化器中复制/保留I
,并在dealloc
中释放它。