FOUNDATION_EXPORT 和 #define的区别

最近在拜读SD,YYModel,AFNetworking的源码,发现人家定义常量的时候并没有用#define,而是用的FOUNDATION_EXPORT,所以查阅了资料写下来记录一下,方便自己以后学习,以AFN为例

  • AFNetworkReachabilityManager.h
1
2
FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification;
FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem;
  • AFNetworkReachabilityManager.m
1
2
NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change";
NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem";
  • #define定义
1
#define AFNetworkingReachabilityDidChangeNotification @"com.alamofire.networking.reachability.change"

为什么第三方的都这么定义呢,肯定有它的道理,那么这俩种方式有什么区别呢?

  • FOUNDATION_EXPORT工作原理是( == ),即在检测字符串值是否相等的时候直接是比较的指针地址
  • #define的工作原理(isEqualToString:),是一一比较字符串的每一个字符是否相等

注意:如果导入的类是UIKit类,切记换成UIKIT_EXTUREN;

相比之下,高下立判,前者的速度更快,而且更重要的一点是看起来可以装逼啊,哈哈!

这个人很帅<br>他什么都不想说<br>