【问题标题】:iOS: How do I work around casting to const char with ARC enabled?iOS:如何在启用 ARC 的情况下转换为 const char?
【发布时间】:2012-06-20 10:57:20
【问题描述】:

我有这个:

// Setup the SQL Statement and compile it for faster access
NSString *sqlStatement = @"SELECT * FROM nameList";

const char *sqlStatementC  = (const char* )sqlStatement;

但 ARC 不喜欢这样。有解决办法吗?

谢谢

【问题讨论】:

    标签: ios casting char constants


    【解决方案1】:

    因为这是绝对无效的。 sqlStatement 是一个NSString,一个Objective-C 对象。您不能简单地将其转换为const char *。您必须使用一种方法来访问其内容作为 C srting:

    const char *sqlStatementC = [sqlStatement UTF8String];
    

    备注1:顺便说一下,这与ARC完全无关。

    备注2:使用指针标记星号贴在变量名上,而不是类型名(即const char* sqlStatementC不是很好,const char *sqlStatementC更好)。

    【讨论】:

    • @Pruitlgoe:可能是这样,但这样写是有原因的。
    • 仅当您在同一行声明多个变量时,我不喜欢这样做的编码风格。否则,编译器会将空白视为无关紧要。此外,在编写方法时,比如说 -(NSString* ) myMethod : (NSString* ) aString 你会注意到指针引用是类名,而不是变量。对我来说,这是一个很好的论点,即指针应该更接近类名而不是变量名。但这是一个有争议的问题,因为我们都同意这是一种风格偏好。
    • @PruitIgoe 当然 :) 我可以说我喜欢 *ident 格式吗?
    【解决方案2】:

    用途:

    const char* sqlStatementC  = [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding];
    

    const char* sqlStatementC  = [sqlStatement UTF8String];
    

    【讨论】:

    • 来自 SO 指南:“[...] 您应该接受最佳答案,或者如果有相同的答案,则选择第一个
    • @graver 我说过你很摇滚吗?
    • @H2CO3 :) 很明显你的答案应该被接受.. 我什至首先支持你:)
    • 哇。你这么说真是太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多