layout: post title: Aspect date: 2018-07-24 10:26:24.000000000 +09:00 —
为何Aspects在定义ErrorLog宏的时候采用while(0)的循环
#define AspectLogError(...) do { NSLog(__VA_ARGS__); }while(0)
#define AspectError(errorCode, errorDescription) do { \
AspectLogError(@"Aspects: %@", errorDescription); \
if (error) { *error = [NSError errorWithDomain:AspectErrorDomain code:errorCode userInfo:@{NSLocalizedDescriptionKey: errorDescription}]; }}while(0)
A: 使用 do-while 保证 Log 只被执行一次
@property 和 @dynamic
如果对@property声明的属性name,在implementation方法中使用@dynamic name,想要保证运行时不出错,则需要自己从新声明一个成员变量和setter/getter方法。原因:
@dynamic 的语义是告诉编译器,用户会自己实现setter/getter方法和创建成员变量,如果用户不实现setter/getter方法,使用了该属性,代码能够通过编译,但会在运行时报错,无法找到对应的setter/getter方法