3
@interface ClassA : UITableViewController {

    NSString *member;
}

@end

成员声明如上。

如果我使用

NSString * astring = [[NSString alloc] initWithString:@"???"];
member = astring;

成员会保留字符串吗?

4

2 回答 2

2

不,它不会保留它。这是实例变量(也称为 iVar)。它不会释放旧对象,也不会保留新对象(作为 setter 中的典型声明属性)。

//如果property self.member = aString;//调用setter,等价于[self setMember:aString],旧值被释放,并给aString发送retain(或根据属性声明复制)消息。

If iVar member = aString//没有内存管理。

于 2012-07-10T08:15:53.640 回答
1

您所做的是声明一个实例变量(有时称为“ivar”)并将其指向一个字符串。分配变量本身不会保留字符串,但在您的示例中,自从您分配字符串以来,该字符串的保留计数已经为 1。

根据您是否使用 ARC,字符串将在作用域结束时释放。如果您不使用 ARC,您有责任自己释放字符串。话虽这么说,在您的确切情况下astring是一个永远不会被释放的字符串文字,因此在这种情况下内存管理是无关紧要的。

于 2012-07-10T08:19:04.527 回答