我用伪代码做了一些方法,我想创建客观的 C 方法。你能帮我定义一下吗?我对目标C不是很熟悉,所以我很困惑。另外,我想使用字符串作为方法的参数,而不是 NSString 对象。
这是方法定义。我不确定它是否符合客观的 C 定义,我也不确定“字符串”类型。
-(BOOL) testMethod(string largestring, string smallstring) {
return true;
}
我是否必须包含一些库才能使用字符串类型?谢谢。
我用伪代码做了一些方法,我想创建客观的 C 方法。你能帮我定义一下吗?我对目标C不是很熟悉,所以我很困惑。另外,我想使用字符串作为方法的参数,而不是 NSString 对象。
这是方法定义。我不确定它是否符合客观的 C 定义,我也不确定“字符串”类型。
-(BOOL) testMethod(string largestring, string smallstring) {
return true;
}
我是否必须包含一些库才能使用字符串类型?谢谢。
那么这里有多种方法:
extern "C"..mm使用扩展名(即 Objective-C++)命名您的 Objective-C 代码并直接调用 C++。有一些限制:
-(void) dealloc.一个很好的观点:
你的方法应该是这样的
-(BOOL) testMethodWithLargeString:(NSString *)largestring smallString(NSString *)smallstring {
return YES;
}
要访问此方法:
BOOL result = [<classObject> testMethodWithLargeString:string1 smallString:string2];
如果方法在 self 类中,则使用,self否则您需要使用对象或类。
此外,编写多个参数化方法的约定,(将其分成多行):
BOOL result = [<classObject> testMethodWithLargeString:string1
smallString:string2];
我是否必须包含一些库才能使用字符串类型?
不,你不必使用任何像 string.h 这样的库
在可可基金会框架中,所有这些都包括在内。
示例代码:
-(BOOL) testMethod :(NSString *)largestring :(NSString *)smallstring {
return YES;
}
说明:检查Apple 文档。

采用 :
[self testMethod :yourLargeString :yourSmallString];
我是否必须包含一些库才能使用字符串类型?
NSString.h在内部声明Foundation.framework,Xcode默认情况下,在您创建新框架时将此框架添加到您的项目中(检查框架文件夹内)。因此,您已隐式添加了该库,这就是为什么不需要包含特定NSString类的原因。你说你想使用字符串作为参数,所以我假设你不想要 C 风格char*,而是某种字符串类。由于您没有指定任何其他内容,因此在我的示例中,我使用std::string的是 C++ 标准库。
这是您的方法在 Objective-C 语法中的样子:
#import <string>
- (BOOL) testMethodWithLargeString:(const std::string&)largeString smallString:(const std::string&)smallString
{
return YES;
}
一些注意事项:
.mm. 扩展名告诉编译器该文件包含混合的 C++ 和 Objective-C 代码std::string来自 C++ 标准库,但我相信您不必做任何特别的事情来使您的项目链接到该库。BOOL(大写)还是bool(小写)作为返回类型。BOOL是传统的 Objective-C 布尔类型,而bool是传统的 C++ 原始布尔类型。WithBOOL你必须使用YESandNO作为返回值,而 withbool你必须使用trueand false。你不应该尝试混合这两种类型和它们的值,它不会让编译器高兴(如果你使用强制转换来强制编译器接受混合,迟早你会不高兴)const std::string&作为in参数的类型。这const将使您免于意外更改参数的内容。如果您只使用std::string&(不使用const),则参数将成为out参数。我还建议您不要使用指针(即const std::string*or std::string*),因为std::string它是一种值类型(如果不熟悉,请阅读该主题),因此通常与引用结合使用。最后但并非最不重要的一点:永远不要使用(std::string即没有&[reference] 或*[pointer])——如果你这样做了,每次调用该方法时都会创建一个字符串的副本。如果您已经知道所有这些事情,那么您当然可以忽略我的建议 :-)Maxthon Chan 的回答还提供了有用的提示,说明在混合 C++ 和 Objective-C 时需要考虑什么。