我是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 ......
我错过了什么?
答案 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中有一个很好的解释。
编辑抛开:为什么不标记第二个参数?这样看起来很奇怪。