【问题标题】:How to change this so that it returns arrays如何更改它以使其返回数组
【发布时间】:2010-09-26 09:07:14
【问题描述】:

以下代码完美运行并显示正确的输出:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self expand_combinations:@"abcd" arg2:@"" arg3:3];
}

-(void) expand_combinations: (NSString *) remaining_string arg2:(NSString *)s arg3:(int) remain_depth
{
    if(remain_depth==0)
    {
        printf("%s\n",[s UTF8String]);
        return;
    }

    NSString *str = [[NSString alloc] initWithString:s];
    for(int k=0; k < [remaining_string length]; ++k)
    {

        str = [s stringByAppendingString:[[remaining_string substringFromIndex:k] substringToIndex:1]];
        [self expand_combinations:[remaining_string substringFromIndex:k+1] arg2:str arg3:remain_depth - 1];

    }
    return;
}

但是,我不想输出结果,而是想将它们返回到 NSArray。如何更改此代码以执行此操作?我需要在程序的其他部分使用此函数生成的信息。

【问题讨论】:

  • 您好像有过这样的几个问题。也许你应该看看一些关于objective-c的书。 This post 有一些参考资料。
  • 我已经阅读过有关 Objective-c 的书籍。你认为我会在许多关于objective-c 的书籍中找到这个问题的答案吗?我见过的不谈论这种类型的问题。
  • 好吧,坦率地说,您的代码存在多个问题,表明您并不精通该语言。所以,是的,阅读更多关于 Objective-C 的内容会让你受益。

标签: objective-c cocoa cocoa-touch nsmutablearray nsarray


【解决方案1】:

您需要在代码中更改几项内容。

  • 首先 - 考虑将您的方法名称更改为比 -expand_combinations:arg2:arg3 更清晰、更有意义的名称。
  • 第二次 - 你有内存泄漏。您无需设置分配内存并使用字符串s 初始化str,因为您会在循环中立即更改其值,而不会释放旧值。
  • 第三 - 看看NSMutableArray。在方法的开头,使用[NSMutableArray array] 创建一个数组,然后在您拥有printf 的每一行处,将字符串添加到数组中。然后退货。

【讨论】:

  • 不应该alloc和init str,还是应该在循环后直接释放?
  • awakeFromNib: str 是一个变量。您不应该分配和初始化一个字符串并将其指针分配给该变量,因为您随后立即将另一个字符串的指针分配给该变量,既浪费又泄漏了第一个字符串。
【解决方案2】:

基本上你有:
在[self expand_combinations ... 之前的viewDidLoad 中创建可变数组
将附加参数(可变数组)添加到expand_combinations
在expand_combinations中填充数组

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2019-12-21
    • 2018-10-05
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多