1

私は C を書いていた Objective C の初心者です。 とにかく、DataProcessing というクラスがあります。

DataProcessing.m
...
- (BOOL)MyStringTweaker:(NSString *)strIn : (NSString *)strOut {
    if(some_thing) {
        strOut = [NSString stringWithFormat:@"I_am_tweaked_%@", strIn];
        return true;
    }
    else
        return false;
}
...

AppDelegate から (OSX アプリケーション)

AppDelegate.m
...
NSString *tweaked;
DataProcessing *data_proc = [[DataProcessing alloc] init];
if([data_proc MyStringTweaker:@"tweak_me":tweaked])
    NSLog([NSString stringWithFormat:@"Tweaked: %@", tweaked]);
else
    NSLog(@"Tweaking failed...");
...

これは機能しません。* MyStringTweaker の呼び出し後、微調整は NIL です...

私は何が欠けていますか?

4

1 に答える 1

2

C と同様に、Objective-C は値渡しのみです。メソッドのシグネチャを次のように変更する必要があります。

- (BOOL)MyStringTweaker:(NSString *)strIn : (NSString **)strOut

そして使用:

*strOut = [NSString stringWithFormat:@"I_am_tweaked_%@", strIn];

任務を遂行すること。

次に、それを呼び出す場所に、入力するポインターのアドレスを渡す必要があります。

[data_proc MyStringTweaker:@"tweak_me" :&tweaked]

comp.lang.c FAQに適切な説明があります。

編集上の余談: 2 番目の引数にラベルを付けないのはなぜですか? こんなに裸になるのはおかしい。

于 2012-12-20T19:28:11.090 に答える