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

目标C NSstring分配问题

  •  1
  • element119  · 技术社区  · 16 年前

    在cocoa应用程序的头文件中,我声明一个nsstring ivar:

    NSString *gSdkPath;

    然后,在awakefromnib中,我将它赋给一个值:

    gSdkPath = @"hello";

    稍后,代码中的值会发生更改:

    gSdkPath = [NSString stringWithString:[folderNames objectAtIndex:0]];

    (从objectatindex返回的对象是nsstring)

    但是,在这之后,在另一个方法中,当我尝试nslog()(或使用)时, gSdkPath 变量,应用程序崩溃。我确信这与内存管理有关,但我从Cocoa开始,并不确定这一切是如何工作的。

    感谢您的帮助。

    编辑: 这是通过保留绳子来解决的。 [gSdkPath retain] .

    1 回复  |  直到 16 年前
        1
  •  2
  •   Jakob Borg    16 年前

    (从返回的对象 objectatindex是nsstring)

    你确定?我建议将它放入它自己的临时变量中,并再次检查它是否为零或在某种程度上无效。

    编辑: 如果到目前为止还可以,请注意,StringWithString返回一个自动释放的对象。如果你想“以后”使用它,你需要保留它。

    gSdkPath = [NSString stringWithString:[folderNames objectAtIndex:0]];
    [gSdkPath retain];