这似乎是一个非常有效的计划:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSString* hey = @"hey"
@"there";
NSLog(@"%@",hey);
[pool drain];
return 0;
}
在llvm gcc和apple llvm中进行编译时没有显示警告或错误。为什么?似乎应该对此进行警告,因为我只能将其视为混乱。特别是在这样的情况下:
NSArray* a = [NSArray arrayWithObjects:@"one",
@"two,
@"three
@"four",
nil];
你期待四个参赛作品......但不是!整蛊,对吧?是因为您可能希望将字符串定义分成多行?
答案 0 :(得分:2)
这是Objective-C中多行字符串的语法。
我无法明确回答语言设计师为何如此设计它,但我们可以假设他们希望Objective-C字符串的语法类似于C字符串的语法。
也就是说,在C中,您可以对多行字符串执行以下操作:
char *my_string = "Line 1 "
"Line 2";
在Objective-C中,您可以对多行字符串执行以下操作:
NSString *my_string = @"Line1 "
@"Line2"; // The @ on this line is optional.
答案 1 :(得分:1)
是否因为您可能希望将字符串定义拆分为多行?
是。当您想要分割非常长的字符串以获得更好的代码读取时,即在NSLocalizedString
密钥描述中,它非常有用。