0

使用 ARC,现在可以像这样分配一个字符串值:

 self.userName = [[NSString alloc] initWithString:self.currentParsedCharacterData];

或者这仍然会导致内存泄漏,因此需要我像这样分配它:

NSString *tmpString = [[NSString alloc] initWithString:self.currentParsedCharacterData];
self.userName = tmpString;
4

3 回答 3

2

第一个片段在 ARC 下很好,并且是两种方式中更好的一种。Apple 在Transitioning to 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泄漏对象也不会泄漏对象。

setYearOfBirth:带有alloced的消息NSNumber对应于您的代码段。

编译器理解,在第一种情况下,aPerson超出范围,需要在此之前释放,在第二种情况下,没有明确引用NSNumber对象,必须释放或放入自动释放池。它代表您处理这两个要求。

于 2012-05-02T02:41:38.843 回答
0

是的,使用 ARC 就可以了。事实上,我会推荐你​​实现它的第一种方式。

于 2012-05-02T02:38:30.783 回答
0

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

于 2012-05-02T02:38:56.307 回答