Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c @strongify的实现_Objective C - Fatal编程技术网

Objective c @strongify的实现

Objective c @strongify的实现,objective-c,Objective C,我阅读了metamacro_foreach的源代码并手动展开了一个案例,为什么SEP中没有任何内容 strongify()。如果有人能解释这段代码,那真是太好了。 metamacro_foreach的源代码: [try{}@finally{}的存在只是为了让编译器满意宏前面的额外的@符号 所以@strongify(…)扩展到类似 #define strongify(...) \ try {} @finally {} \ _Pragma("clang diagnostic push

我阅读了metamacro_foreach的源代码并手动展开了一个案例,为什么SEP中没有任何内容

strongify()。如果有人能解释这段代码,那真是太好了。 metamacro_foreach的源代码:


[

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")