CFStringRef适合常量?

时间:2013-10-17 17:19:37

标签: objective-c

我想定义一些常量,并考虑使用#define构造,如下所示:

#define kUpdateTeamNotification CFSTR("kUpdateTeamNotification")

我的问题是,当我去使用它时:

[[NSNotificationCenter defaultCenter] postNotificationName:kUpdateTeamNotification object:team];

我收到了一个不兼容的指针类型警告。我的印象CFSTR基本上与@""字符串相同。我理解错了吗?

1 个答案:

答案 0 :(得分:6)

CFStringNSStringtoll-free bridged因此它们是相同的。 (CFSTR是用于创建CFString)的宏。但是,由于指针具有不同的类型,因此必须向编译器明确地发出此信号。此外,在ARC中,当您跨越对象和C结构之间的边界时,您将不得不使用桥接演员。

以下是您如何使用桥接演员

[[NSNotificationCenter defaultCenter] postNotificationName:(__bridge NSString *)kUpdateTeamNotification object:team];

有关桥接演员的更多信息,请访问:NSString to CFStringRef and CFStringRef to NSString in ARC?


但是,您可能希望使用NSString字面而不是CFStringRef,也可以使用NSString *const(如Constants in Objective-C中所述)而不是#define {1}}。

所以你的常数会变成

头文件(.h)

FOUNDATION_EXPORT NSString *const kUpdateTeamNotification;

实施文件(.m)

NSString *const kUpdateTeamNotification = @"kUpdateTeamNotification";