我在几个地方看过这段代码。
XYZ *xyz = [[XYZ alloc] init];
但是在dealloc而不是[xyz release]
;
人们使用self.xyz = nil
;
这不会导致内存泄漏吗?
编辑:我最初写的不是xyz = nil
,而是self.xyz = nil
,
这是一个财产。
答案 0 :(得分:3)
是的,那是内存泄漏,但是如果XYZ被声明为属性,例如
@property (nonatomic, retain) XYZ* xyz;
- (void)dealloc
{
self.xyz = nil;
[super dealloc];
}
这不是内存泄漏,也许你看到的实际上是这个?
编辑: 然后它不是内存泄漏,原因是,setter是由属性创建的,它将类似于下面的那个
- (void)setXYZ:(XYZ *)newXyz
{
[xyz release];
xyz = [newXyz retain];
}
因为newXyz为nil,发送retain to nil什么都不做,而旧的xyz正由setter发布。在这种情况下,内存管理正确
答案 1 :(得分:2)
这取决于项目设置。如果启用了ARC,那么,不,应该没有问题。但是,如果项目没有启用ARC,那么内存泄漏可能会出现一些问题。
答案 2 :(得分:0)
您只能对保留的属性和使用setter(self.propertyToBeReleased=nil
或[self setProPropertyToBeReleased:nil
)执行此操作
因此,如果您指定属性nil,则释放旧属性,并且指针指向nil。
您不应该使用iVars。因为数据刚刚泄漏(数据没有发布,但没有指向它的指针 - >不能再发布了。)