

NSMutableArrayのメソッド引数についてもっとも良い方法についてご教示ください。  
下記ソースコードのarray1とarray2には同様の値が格納されます。

[code]

    -(void)testMethod{
    
        NSMutableArray *array1 = [NSMutableArray array];
        NSMutableArray *array2 = [NSMutableArray array];
        [self testMethod01:array1];
        array2 = [self testMethod02];
    }
    
    -(void)testMethod01:(NSMutableArray*)aArray{
    
        [aArray addObject:@"test"];
    }
    
    -(NSMutableArray*)testMethod02{
    
        return @[@"test"].mutableCopy;
    }
    
[/code]

そこでご質問です。  
・testMethod01のように引数に直接書き込む方法をobjective-cとして行って良いのでしょうか。  
・上記を行って良い場合、引数に直接書き込む方法と戻り値として貰う方法どちらが良いのでしょうか。

些細な疑問ですがご教示願います。

以上です、よろしくお願いします。


CC BY-SA 3.0
2015-05-07T15:50:44.133
9913
2015-07-08T17:29:07.157
7603
question
ios objective-c
NSMutableArrayのメソッド引数についてもっとも良い方法


`testMethod01`と`testMethod02`が、おなじ結果を導くメソッドというのが、あなたの質問の前提になっていますが、すこしよく見れば、おなじ結果にはなりません。

[code]

    NSMutableArray *array01 = [NSMutableArray arrayWithObjects: @"Apple", @"Banana", @"Candy", nil];
    [self testMethod01: array01];
    
[/code]

> 出力： {Apple, Banana, Candy, test}
[code]

    NSMutableArray *array02 = [NSMutableArray arrayWithObjects: @"Apple", @"Banana", @"Candy", nil];
    array02 = [self testMethod02];
    
[/code]

> 出力： {test}

なので、「どちらが良い」という比較の対象にはなりません。

> ・testMethod01のように引数に直接書き込む方法をobjective-cとして行って良いのでしょうか。

Objective-Cは、C言語の拡張です。C言語の文法や技法はとうぜんObjective-
Cでも使えます。オブジェクトの参照（ポインタ）を関数の引数に渡す技法は、C言語の基礎としてだれもが習うことです。Objective-
Cのメソッドの実体は、C言語の関数であることも、このさい覚えておいてください。以上から、使ってはいけないという結論が出る余地はありません。


CC BY-SA 3.0
2015-05-07T23:16:05.680
9924
2015-05-07T23:16:05.680
7362
9913
answer


どちらの方法も問題ないと思います。  
ケースバイケースできれいに書ける方を選べば良いかなと思いますよ。

個人的には、以下の理由からメソッド2のタイプの方が好きです。  
・Cocoaなどappleのメソッドは、引数で受け取ったインスタンスを直接改変するより、メソッド内で生成した新たなインスタンスを返すものの方が多い印象があるため。  
・呼び出し側から見ると、そのメソッドが引数を改変するものか否か分かりにくいため。


CC BY-SA 3.0
2015-05-09T13:37:35.053
9989
2015-05-09T13:37:35.053
5274
9913
answer