【问题标题】:Create constant NSString from constant CFStringRef从常量 CFStringRef 创建常量 NSString
【发布时间】:2009-12-22 11:55:00
【问题描述】:

我正在尝试创建一个 Cocoa 框架,它是一个面向对象的包装器,围绕着用 Core Foundation 编写的程序框架。程序框架有许多常量,它们都定义为extern CFStringRef constantName

我应该如何创建直接映射到过程常量的 NSString 常量,以便在我的框架中我可以简单地将 NSString 常量转换为框架内的 CFStringRef 常量,这样使用我的框架的开发人员就不需要知道自己投。

我尝试过的每件事都会导致编译器错误Initializer element is not constant。这是我想使用的模式:

常量.h:

extern NSString * myConstant

常量.m:

#import "Constants.h"
NSString *myConstant = ConstantFromCFStringRef;

我在 Constants.m 中使用 NSString *aConstant = @"someStringLiteral" 成功地使用 NSString 声明常量值,但在这种情况下,我希望拥有与 CFStringRefs 相同的值,我不能忽略。

【问题讨论】:

    标签: nsstring constants cfstring


    【解决方案1】:

    你试过了吗:

    NSString * myconstant = (NSString *)constantName;
    

    您可以在这里找到相同的答案:How to convert CFStringRef to NSString? 和那里:CocoaDev: CFStringRef

    确实,Apple 已经解决了您的问题。这称为Toll Free Bridging

    【讨论】:

    • 你的ConstantFromCFStringRef是如何定义的?
    • 我试过NSString * myConstant = (NSString *)CFStringRef; 但这会引发上述错误。我尝试使用 CFStringGetCStringPtr 和 CFStringGetCString,但它们也失败了,所以我现在尝试编写它以避免完全暴露常量(在我必须暴露它们的地方,我使用我自己的常量和几个私有方法来转换它们以供底层框架使用)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多