Objective c @strongify的实现
我阅读了metamacro_foreach的源代码并手动展开了一个案例,为什么SEP中没有任何内容 strongify()。如果有人能解释这段代码,那真是太好了。 metamacro_foreach的源代码:Objective c @strongify的实现,objective-c,Objective C,我阅读了metamacro_foreach的源代码并手动展开了一个案例,为什么SEP中没有任何内容 strongify()。如果有人能解释这段代码,那真是太好了。 metamacro_foreach的源代码: [try{}@finally{}的存在只是为了让编译器满意宏前面的额外的@符号 所以@strongify(…)扩展到类似 #define strongify(...) \ try {} @finally {} \ _Pragma("clang diagnostic push
[
try{}@finally{}
的存在只是为了让编译器满意宏前面的额外的@
符号
所以@strongify(…)
扩展到类似
#define strongify(...) \
try {} @finally {} \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Wshadow\"") \
metamacro_foreach(mtl_strongify_,, __VA_ARGS__) \
_Pragma("clang diagnostic pop")
您可以从宏中删除try{}@finally{}
,像strongify(…)
一样使用它,它也应该可以工作
但是我认为宏的作者希望前面的
@
符号使它看起来像真正的Objective-C语法,因为大多数ObjC关键字都是以@
符号开头的。例如@autoreleasepool
,@try
,等等。谢谢你的回答,为什么SEP没有留下任何内容strongify@JohnHanr我认为SEP代表分离器,而我在这种情况下,它是空的。
@try {} @finally {}
_Pragma("clang diagnostic push")
_Pragma("clang diagnostic ignored \"-Wshadow\"")
// something....
_Pragma("clang diagnostic pop")