Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Ios 在Objective-C中使用反斜杠(\)字符_Ios_Objective C - Fatal编程技术网

Ios 在Objective-C中使用反斜杠(\)字符

Ios 在Objective-C中使用反斜杠(\)字符,ios,objective-c,Ios,Objective C,最近,我在创建单例实例时遇到了这个宏 #if __has_feature(objc_arc) // ARC Version #define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \ \ + (classname *)sharedInstance\ {\ static classname *shared##classname = nil;\ static dispatch_once_t onceToken;\ dispatch_once(&

最近,我在创建单例实例时遇到了这个宏

#if __has_feature(objc_arc) // ARC Version

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname)   \
\
+ (classname *)sharedInstance\
{\
static classname *shared##classname = nil;\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
shared##classname = [[self alloc] init];\
});\
return shared##classname;\
}
有人能告诉我每行反斜杠的用法吗?它的优点是什么

还有,这里的字符有什么用?

它在每行末尾转义换行,并允许像这样的复杂宏来保持可读性

C必须在单行上定义预处理器宏,即以换行符终止,因此需要长宏使用反斜杠转义中间换行符

另一方面,您将在Makefiles中看到类似的内容。

它在每行末尾转义换行,并允许一个复杂的宏(如此)来保持可读性

C必须在单行上定义预处理器宏,即以换行符终止,因此需要长宏使用反斜杠转义中间换行符

另一方面,您将在Makefiles中看到类似的内容。

字符是令牌连接,请参阅

简而言之,它接受字符串共享参数和classname的值,并从中生成一个字符串

在这种情况下,您实际上不需要使用,相同的宏可用于以下各项:

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname)   \
\
+ (classname *)sharedInstance {\
    static classname *singleton = nil;\
    static dispatch_once_t onceToken;\        
    dispatch_once(&onceToken, ^{\
       singleton = [[self alloc] init];\
    });\
    return singleton;\
}
即使没有classname参数,它实际上也可以工作:

#define SYNTHESIZE_SINGLETON   \
\
+ (instancetype)sharedInstance {\
    static id singleton = nil;\
    static dispatch_once_t onceToken;\        
    dispatch_once(&onceToken, ^{\
       singleton = [[self alloc] init];\
    });\
    return singleton;\
}
请注意,缩进复杂的宏很有帮助,因为它使宏更具可读性。

字符是标记连接,请参阅上的详细信息

简而言之,它接受字符串共享参数和classname的值,并从中生成一个字符串

在这种情况下,您实际上不需要使用,相同的宏可用于以下各项:

#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname)   \
\
+ (classname *)sharedInstance {\
    static classname *singleton = nil;\
    static dispatch_once_t onceToken;\        
    dispatch_once(&onceToken, ^{\
       singleton = [[self alloc] init];\
    });\
    return singleton;\
}
即使没有classname参数,它实际上也可以工作:

#define SYNTHESIZE_SINGLETON   \
\
+ (instancetype)sharedInstance {\
    static id singleton = nil;\
    static dispatch_once_t onceToken;\        
    dispatch_once(&onceToken, ^{\
       singleton = [[self alloc] init];\
    });\
    return singleton;\
}

请注意,缩进复杂的宏很有帮助,因为它使它们更具可读性。

Ah!当然我知道这意味着你可以继续新的一行,但逃避新行字符是它正在做的。现在你这么说很明显啊!当然我知道这意味着你可以继续新的一行,但逃避新行字符是它正在做的。当你这么说的时候,很明显。角色是token OnCateoNation,请参阅上的更多。简而言之,它接受字符串共享的参数和classname的值,并从中生成一个字符串。简而言之,它接受字符串共享参数和classname的值,并从中生成一个字符串。