如何使用 ARC 在目标 C 中分配字符串值



使用 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 负责内存管理,以便不会泄漏PersonNSNumber对象。

带有alloc ed NSNumbersetYearOfBirth:消息与您的代码段相对应。

编译器理解,在第一种情况下,aPerson超出了范围,需要在发生这种情况之前释放,而在第二种情况下,没有对NSNumber对象的显式引用,必须将其释放或放入自动发布池中。它代表您处理这两个要求。

是的,使用 ARC 可以。事实上,我建议你实现它的第一种方法。

你的任何一个例子都很好。就内存管理/ARC而言,两者之间没有区别。

最新更新