我想定义一些常量,并考虑使用#define构造,如下所示:
#define kUpdateTeamNotification CFSTR("kUpdateTeamNotification")
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我去使用它时:
[[NSNotificationCenter defaultCenter] postNotificationName:kUpdateTeamNotification object:team];
Run Code Online (Sandbox Code Playgroud)
我得到一个不兼容的指针类型警告.我的印象CFSTR基本上与@""字符串相同.我理解错了吗?
CFString并且NSString是免费的桥接,因此它们是相同的东西.(CFSTR是一个创建的宏CFString).但是,由于指针具有不同的类型,因此必须向编译器明确地发出此信号.此外,在ARC中,当您跨越对象和C结构之间的边界时,您将不得不使用桥接转换.
这是你如何使用桥接演员
[[NSNotificationCenter defaultCenter] postNotificationName:(__bridge NSString *)kUpdateTeamNotification object:team];
Run Code Online (Sandbox Code Playgroud)
有关桥接强制转换的更多信息可以在这里找到:NSString到CFStringRef和CFStringRef到ARC中的NSString?
但是,您可能希望使用NSString文字而不是a,CFStringRef并且还使用a NSString *const(如Objective-C中的常量中所述)而不是a #define.
所以你的常数会变成
FOUNDATION_EXPORT NSString *const kUpdateTeamNotification;
Run Code Online (Sandbox Code Playgroud)
NSString *const kUpdateTeamNotification = @"kUpdateTeamNotification";
Run Code Online (Sandbox Code Playgroud)