Difference between NSString literals

后端 未结 5 775
难免孤独
难免孤独 2020-11-27 06:46

What is the difference between these two lines?

NSString * string = @\"My String\";
NSString * string = [[[NSString alloc] initWithString:@\"MyString\"] auto         


        
5条回答
  •  萌比男神i
    2020-11-27 07:32

    bryanmac is 100% correct in his answer. I just added an explicit example using GHUnit.

    NSString creation - literal vs nonliteral.

    Shows strings created in various ways if they are literal nor nonliteral.

    - (void) test_stringCreation
    {
        NSString *literalString = @"literalString";
        NSString *referenced = literalString;
        NSString *copy = [literalString copy];
        NSString *initWithString = [[NSString alloc] initWithString:literalString];
        NSString *initWithFormat = [[NSString alloc] initWithFormat:@"%@", literalString];
    
        // Testing that the memory addresses of referenced objects are the same.
        GHAssertEquals(literalString, @"literalString", @"literal");
        GHAssertEquals(referenced, @"literalString", @"literal");
        GHAssertEquals(copy, @"literalString", @"literal");
        GHAssertEquals(initWithString, @"literalString", @"literal");
        GHAssertNotEquals(initWithFormat, @"literalString",
                          @"nonliteral - referenced objects' memory addresses are \
                          different.");
    
        // Testing that the objects referenced are equal, i.e. isEqual: .
        GHAssertEqualObjects(literalString, @"literalString", nil);
        GHAssertEqualObjects(referenced, @"literalString", nil);
        GHAssertEqualObjects(copy, @"literalString", nil);
        GHAssertEqualObjects(initWithString, @"literalString", nil);
        GHAssertEqualObjects(initWithFormat, @"literalString", nil);
    
        // Testing that the strings referenced are the same, i.e. isEqualToString: .
        GHAssertEqualStrings(literalString, @"literalString", nil);
        GHAssertEqualStrings(referenced, @"literalString", nil);
        GHAssertEqualStrings(copy, @"literalString", nil);
        GHAssertEqualStrings(initWithString, @"literalString", nil);
        GHAssertEqualStrings(initWithFormat, @"literalString", nil);
    }
    

提交回复
热议问题