#import 与 @import 区别
#import负责导入程序所需的文件的信息导入到程序中,随着程序所需的文件越来越多,程序就要导入更多的文件,这就带来了越来越长的编译时间,而且有大量重复的。为了解决这个问题可以采用以下办法解决,创建.pch文件,在该文件中加入以下代码。
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif
此时仍然会导入Foundation框架,但是可以很大程度的加快编译速度。但是这也会带来一个新的问题,维护.pch文件是很低效的。
因此引入了@import指令
这段代码告诉编译器需要使用Foundation框架,之后编译器会优化预编译头文件和缓存编译结果的过程。同时,文件中不用再明确引用框架--编译器会根据@import自动导入相应框架。
需要注意的是该指令现阶段还只能用于Apple提供的框架,如果导入的是自己的类或框架还是需要#import。
/*********************分割线*************************/
!!property
property != nil的一个简化语法
property是个对象, !property是判断为空的,再加一个!就相当于判断非空了
/*********************分割线*************************/
static inline EZSFliterBlock _EZR_PropertyExists(NSString *keyPath){
return ^BOOL(id item){
id property =[item valueForKeyPath:keyPath];
return !!property;
};
}
-(BOOL)hasListener {
return[EZS_Sequence(self.privateListenEdges)any:_EZR_PropertyExists(@"reference.to")];
}
这个就是高阶函数的应用,用function generate避免反复的写filter: ^BOOL(id item){ return item != nil;}或者map:^id(id item){ return item.property;}这样的代码
/*********************分割线*************************/