2010-09-26 59 views
-3

下面的代碼工作完美,顯示正確的輸出:如何改變這種做法,它返回數組

- (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。這個代碼如何改變來做到這一點?我需要使用該函數在我的程序的其他部分生成的信息。

+7

看來你有這樣的幾個問題。也許你應該看看一些關於objective-c的書。 [這篇文章](http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books)有一些參考。 – JoshD 2010-09-26 09:11:46

+0

我已經讀過關於objective-c的書。你認爲我會在Objective-C的許多書中找到這個問題的答案嗎?我見過的人不會談論這類問題。 – 2010-09-26 09:16:35

+3

那麼,直言不諱,你的代碼有多個問題,這表明你不熟悉該語言。所以是的,閱讀更多關於Objective-C會讓你受益。 – 2010-09-26 14:34:52

回答

3

有跡象表明,你需要在你的代碼改變幾件事情。

  • 首先 - 考慮改變你的方法的名稱的東西比-expand_combinations:arg2:arg3更清晰和有意義的。
  • 第二個 - 你有內存泄漏。您不需要設置分配內存並使用字符串s初始化str,因爲您在循環中立即更改其值,而不會釋放舊值。
  • 第三 - 看看NSMutableArray。在該方法的開始部分,創建一個包含[NSMutableArray array]的數組,並且在每行都有printf,而是將該字符串添加到數組中。然後返回它。
+0

我應該不分配和初始化str,還是應該在循環之後釋放它? – 2010-09-26 13:06:01

+0

awakeFromNib:'str'是一個變量。你不應該分配和初始化一個字符串,並將它的指針分配給該變量,因爲之後會立即爲該變量賦值另一個字符串的指針,這會浪費和泄漏第一個字符串。 – 2010-09-26 20:07:03

2

basicaly您有:
創建之前[self expand_combinations ...
viewDidLoad可變數組aditional的參數(可變數組)中添加expand_combinations
填入陣列expand_combinations

相關問題