-(void)DEF_test{
#define COUNT @"woca"
NSLog(@"%@",COUNT);// -现在COUNT还有效
#undef COUNT
// NSLog(@"%@",COUNT);// - 现在COUNT无效了
}
带有参数的宏定义
#define sum(v1,v2) ((v1)+(v2))// - 参数和结果都要加上();
int main(){sum(2,3);
return 0;
}
#define MJLogAllIvrs \
- (NSString *)description \
{ \
return [self keyValues].description; \
}
// 颜色
#define MJColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
// 随机色
#define MJRandomColor MJColor(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))
// 断言
#define MJAssert2(condition, desc, returnValue) \
if ((condition) == NO) { \
NSString *file = [NSString stringWithUTF8String:__FILE__]; \
MJLog(@"\n警告文件:%@\n警告行数:第%d行\n警告方法:%s\n警告描述:%@", file, __LINE__, __FUNCTION__, desc); \
MJLog(@"\n如果不想看到警告信息,可以删掉MJConst.h中的第23、第24行"); \
return returnValue; \
}
#define MJAssert(condition, desc) MJAssert2(condition, desc, )
#define MJAssertParamNotNil2(param, returnValue) \
MJAssert2(param, [[NSString stringWithFormat:@#param] stringByAppendingString:@"参数不能为nil"], returnValue)
#define MJAssertParamNotNil(param) MJAssertParamNotNil2(param, )
/**
* 通过字典来创建一个模型
* @param keyValues字典
* @return新建的对象
*/
+ (instancetype)objectWithKeyValues:(NSDictionary *)keyValues
{
NSString *desc = [NSStringstringWithFormat:@"keyValues is not a NSDictionary - keyValues参数不是一个字典, keyValues is a %@ - keyValues参数是一个%@", keyValues.class, keyValues.class];
MJAssert2([keyValuesisKindOfClass:[NSDictionaryclass]], desc, nil);
id model = [[selfalloc]init];
[model setKeyValues:keyValues];
return model;
}
// - iOS 系统的定义有返回值的宏定义 仅供参考
#define CGPointEqualToPoint
CG_EXTERN bool CGPointEqualToPoint(CGPoint point1, CGPoint point2)
CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);
CG_INLINE bool
__CGPointEqualToPoint(CGPoint point1, CGPoint point2)
{
return point1.x == point2.x && point1.y == point2.y;
}