使用Objective C中的指针调用函数

时间:2012-12-20 19:21:26

标签: objective-c pointers nsstring

我是Objective C中的新手,用来编写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 ......

我错过了什么?

1 个答案:

答案 0 :(得分: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中有一个很好的解释。

编辑抛开:为什么不标记第二个参数?这样看起来很奇怪。