所以我有以下课程。对于同一个数据实例,可以多次调用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;
}
答案 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
,但它可能指向内存中随机存放其他变量数据的地方。你可能会弄乱应用程序的数据。