【问题标题】:Using NSString as an Array of NSStrings?使用 NSString 作为 NSString 数组?
【发布时间】:2012-01-12 22:20:24
【问题描述】:

我刚刚遇到了由同事编写的一行代码,而我以前从未在 Obj-C 中看到过这种情况。它看起来很糟糕,我想更改它,但它似乎可以正常工作(应用程序按预期运行),我什至不知道要更改为什么。

NSString **stringArray= new NSString *[numberOfStrings];

这样好吗? NSString 的 NSArray 会更有意义吗?

编辑:为了从内存中正确释放数组,是否需要任何 release 调用?目前,我看到的只有delete [] stringArray;

编辑 2:这似乎正确地从内存中删除了数组:

for (int i=0; i < numberOfStrings; i++)
{
    [stringArray[i] release];
}
delete [] stringArray;

【问题讨论】:

  • 严格来说应该是Objective-C++吧?
  • 假设这不是我见过的最漂亮的解决方案。 NSString 的 NSArray 在 Objective C 中更有意义,使用 NSArray 的代码也可以很好地与 ARC 配合使用。
  • 不是 Objective-C++,它只是一个NSString指针的C风格数组。与 C++ 无关。
  • @BenS C 或 Objective-C 中的“new”是什么?我一定是落伍了……虽然得到的type是一样的,malloc/freenew/delete必须正确配对。
  • 这是 C、C++ 和 Objective-C 的混合体。你应该问问你的同事他们写这样的理由是什么。也许你办公室里有某种奇怪的指导方针?

标签: iphone objective-c nsstring nsarray


【解决方案1】:

对于没有 C 背景的人来说,使用 NSArray 可能更易读,这只是一个用 NSString* 填充的普通旧 C 数组,完全有效,但与 NSArray 实例完全不同。

两者都有道理,但如果该数组的用户期望的是 C 样式数组而不是 NSArray 实例,则可能涉及大量重构。

【讨论】:

    【解决方案2】:

    他正在使用 Objective-C++(您应该能够在右侧面板的“文件类型”中验证 xcode4 中的文件)。

    new 关键字创建一个新的 (NSString *) 数组,大小为 numberOfStrings

    要回答您的问题,NSArray 很可能更易于管理,尤其是在代码中有不同开发人员的情况下。要使用 C++ 数组,可能会出现性能问题,但这取决于该代码的上下文。

    【讨论】:

    • +1 FWIW:这里的语法是:new T [count]:在这种情况下,TNSString*,所以它与new NSString* [numberOfStrings] 相同,这可能更容易“看到”,甚至虽然它有 * 在帖子中拥抱大括号......让风格大战开始吧! ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2012-02-29
    • 2011-04-04
    • 2015-10-30
    • 2010-10-19
    相关资源
    最近更新 更多