@interface ClassA : UITableViewController {
NSString *member;
}
@end
成员声明如上。
如果我使用
NSString * astring = [[NSString alloc] initWithString:@"???"];
member = astring;
成员会保留字符串吗?
@interface ClassA : UITableViewController {
NSString *member;
}
@end
成员声明如上。
如果我使用
NSString * astring = [[NSString alloc] initWithString:@"???"];
member = astring;
成员会保留字符串吗?
不,它不会保留它。这是实例变量(也称为 iVar)。它不会释放旧对象,也不会保留新对象(作为 setter 中的典型声明属性)。
//如果property
self.member = aString;
//调用setter,等价于[self setMember:aString],旧值被释放,并给aString发送retain(或根据属性声明复制)消息。
If iVar
member = aString
//没有内存管理。
您所做的是声明一个实例变量(有时称为“ivar”)并将其指向一个字符串。分配变量本身不会保留字符串,但在您的示例中,自从您分配字符串以来,该字符串的保留计数已经为 1。
根据您是否使用 ARC,字符串将在作用域结束时释放。如果您不使用 ARC,您有责任自己释放字符串。话虽这么说,在您的确切情况下astring
是一个永远不会被释放的字符串文字,因此在这种情况下内存管理是无关紧要的。