代码之家  ›  专栏  ›  技术社区  ›  lmirosevic

如何交换两个nsstring变量(在非垃圾收集环境中)?

  •  0
  • lmirosevic  · 技术社区  · 14 年前

    我试图交换两个字符串,但我不确定我所做的是合法的(来自Java,我是新的到整个保留计数内存管理)。

    这是我的代码:

    NSString *temp = [[NSString alloc] init];
    temp = originalLanguageCode;
    originalLanguageCode = translatedLanguageCode;
    translatedLanguageCode = temp;
    [temp release];
    

    允许这样做吗?我发现了一些奇怪的虫子,我不知道是什么引起了它们,希望这就是它。非常感谢您的帮助,谢谢!

    2 回复  |  直到 14 年前
        1
  •  5
  •   Cory Kilger    14 年前

    将新分配的字符串分配给 temp 您正在立即分配 originalLanguageCode 这样分配的字符串就完全丢失了。这是内存泄漏。然后你要释放 临时雇员 ,最初是 原始语言代码 . 这是一个过度释放。

    试试这个:

    NSString *temp = originalLanguageCode;
    originalLanguageCode = translatedLanguageCode;
    translatedLanguageCode = temp;
    
        2
  •  1
  •   Joshua Nozzi    14 年前

    一切看起来都很好,除了在第一行中创建了一个字符串,在第二行中立即泄漏。你可以说:

    NSString *temp = originalLanguageCode;
    ...
    

    …因为您没有创建(也没有拥有)分配给“temp”的对象,所以请去掉[temp release]。

    现在您没有说originalLanguageCode和translatedLanguageCode是否是实例变量。如果是这样,请使用它们的访问器(它们应该自己对内存管理做正确的事情)。