如果在为其分配新的分配内存之前没有将var设置为nil会导致内存泄漏吗?

时间:2012-04-12 19:25:50

标签: iphone memory-management memory-leaks nsstring

所以我有以下课程。对于同一个数据实例,可以多次调用setName。现在的问题是,如果不做_name = nil;在为它分配一个新的字符串(分配的内存)之前,它是否会导致内存泄漏?

// data.h
@interface data : NSObject
{
@private
    NSString *_name;
}

@property (strong, nonatomic) NSString *name;

// data.m
@synthesize name = _name;

- (void)setName:(NSString *)name {
    _name = nil; // <-- if don't do this, would it end up causing memory leak?
    _name = [NSString alloc] initWithString:name;
}

3 个答案:

答案 0 :(得分:1)

代码中的属性 name 具有强修饰符,因此我假设您使用的是ARC。在这种情况下,不,它不会导致内存泄漏。

答案 1 :(得分:0)

在您的特定情况下,您不会出现内存泄漏。这是因为@synthesize为您设置了setter方法。对于强属性属性,您的setter如下所示:

- (void)setName:(NSString *)newName {
    [newName retain];
    [_name release];

    _name = newName;
    return _name;
}

它基本上为您处理内存管理。首先它在释放之前保留newName(如果名称和newName相同,则首先释放会使应用程序崩溃)。然后它释放旧名称并将newName分配给_name ivar

答案 2 :(得分:-1)

不,它不会导致内存泄漏。但是,如果你在使用它之前没有初始化var,你将永远不知道现在正在使用哪个内存部分。即你想认为它有一个nil,但它可能指向内存中随机存放其他变量数据的地方。你可能会弄乱应用程序的数据。