最近在拜读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";
|
1
| #define AFNetworkingReachabilityDidChangeNotification @"com.alamofire.networking.reachability.change"
|
为什么第三方的都这么定义呢,肯定有它的道理,那么这俩种方式有什么区别呢?
- FOUNDATION_EXPORT工作原理是( == ),即在检测字符串值是否相等的时候直接是比较的指针地址
- #define的工作原理(isEqualToString:),是一一比较字符串的每一个字符是否相等
注意:如果导入的类是UIKit类,切记换成UIKIT_EXTUREN;
相比之下,高下立判,前者的速度更快,而且更重要的一点是看起来可以装逼啊,哈哈!