使用 ARC,现在可以像这样分配一个字符串值吗:
self.userName = [[NSString alloc] initWithString:self.currentParsedCharacterData];
或者这是否仍然会导致内存泄漏,因此需要我像这样分配它:
NSString *tmpString = [[NSString alloc] initWithString:self.currentParsedCharacterData];
self.userName = tmpString;
第一个片段在 ARC 下很好,是两种方式中更好的。Apple 在过渡到 ARC 指南中有这样一个例子:
- (void)contrived {
Person *aPerson = [[Person alloc] init];
[aPerson setFirstName:@"William"];
[aPerson setLastName:@"Dudney"];
[aPerson setYearOfBirth:[[NSNumber alloc] initWithInteger:2011]];
NSLog(@"aPerson: %@", aPerson);
}
并说:
ARC 负责内存管理,以便不会泄漏
Person
和NSNumber
对象。
带有alloc
ed NSNumber
的setYearOfBirth:
消息与您的代码段相对应。
编译器理解,在第一种情况下,aPerson
超出了范围,需要在发生这种情况之前释放,而在第二种情况下,没有对NSNumber
对象的显式引用,必须将其释放或放入自动发布池中。它代表您处理这两个要求。
是的,使用 ARC 可以。事实上,我建议你实现它的第一种方法。
你的任何一个例子都很好。就内存管理/ARC而言,两者之间没有区别。