1

我已经在这个 Stackoverflow 中看到了这段代码作为对某些问题的回答,我试图在我的代码中暗示这一点,但我没有得到这是什么类型的函数,我该如何调用它

NSString * ReplaceFirstNewLine(NSString * original)
{
    NSMutableString * newString = [NSMutableString stringWithString:original];

    NSRange foundRange = [original rangeOfString:@"\n"];
    if (foundRange.location != NSNotFound)
    {
        [newString replaceCharactersInRange:foundRange
                                 withString:@""];
    }
    NSLog(@"%@",newString);
    return [[newString retain] autorelease];
}

我试图这样称呼它,[self ReplaceFirstNewLine(@"\nstirng\nstring")]; 但它给出了语法错误,任何人都可以帮助我

4

3 回答 3

8

首先,它不是一个method,它是一个 C function,类似于NSLog,所以这样使用它:

NSString *results = ReplaceFirstNewLine(@"\nstirng\nstring");
NSLog(@"%@", results);

C 风格的函数有优点和缺点,我将尝试在此处列出其中的一些:

好处:

  • 速度。AC 函数几乎总是比等效的 Objective-c 方法快,因为调用该函数不需要动态调度

  • 指针。获得指向 C 风格函数的指针比获得 Objective-C 方法的指针要容易得多,这使得它更适合 C API 回调

缺点:

  • iVar。在 C 函数中,如果不使用运行时向导,您就无法访问对象的私有变量(即使是对它的引用),此时确实不值得。

  • 没有概念self。您不能在 C 函数中使用self(或_cmd,就此而言)变量,因为每个 C 函数都独立于产品中的其他函数。

于 2012-06-20T12:14:13.070 回答
0

你可以这样称呼它: ReplaceFirstNewLine(@"");

于 2012-06-20T12:14:58.273 回答
0
- (NSString *) ReplaceFirstNewLine(NSString * original){
    //...
}

现在你应该可以像方法一样调用它了:

[self ReplaceFirstNewLine(@"\nstirng\nstring")];
于 2012-06-20T15:00:31.877 回答