0

これは完全に有効なプログラムのようです。

#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;
}

これをllvmgccおよびapplellvmでコンパイルしても、警告やエラーは表示されません。なんで?私はこれを混沌を誘発するものとしてしか見ることができないので、これについて警告されるべきであるように思われます。特にこのような状況では:

NSArray* a = [NSArray arrayWithObjects:@"one",
              @"two,
              @"three
              @"four",
              nil];

あなたは4つのエントリーを期待するでしょう...しかし違います!トリッキーですね 文字列定義を複数の行に分割したい場合があるからですか?

4

2 に答える 2

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.

( https://stackoverflow.com/a/797351/25295から採用されたコードスニペット)

于 2012-10-05T22:09:52.970 に答える
1

文字列定義を複数の行に分割したい場合があるからですか?

はい。NSLocalizedString非常に長い文字列を分割してコードを読みやすくする場合、つまりキーの説明で使用する場合に便利です。

于 2012-10-05T22:07:25.367 に答える