Похоже, вы путаете идентификатор объекта, то есть читаемое человеком символическое представление его адреса в памяти, со значением.
В этом случае ...
NSString *steve=@"steve";
... первый "Стив" - это просто идентификатор. Компилятор использует его для обозначения места в памяти, чтобы его можно было легко найти в коде. Второй «Стив» является значением и не имеет абсолютно никакого отношения к идентификатору. Ни один Стив не требуется для другого. Например ...
NSString *bob=@"steve";
и
NSString *steve=@"bob";
... одинаково действительны и полностью разделяют объекты.
Как отмечалось здесь другими, символ двоеточия является зарезервированным символом, используемым для обозначения логических операций. Вы не можете использовать его в идентификаторе. Это ...
NSString * media: thumbnail = @ "someValue";
... выдает сообщение об ошибке, потому что компилятор видит ...
адрес по NSString с идентификатором
"медиа" побитовое по идентификатору
"thumbnail" равно
адрес NSString со значением
"SomeValue".
Вам не нужно определенное имя идентификатора для строки, чтобы идентифицировать значение, взятое из xml. Подойдет любое официальное название.
Звучит так, как будто вам нужно связать метку xml "media: thumbnail" с определенным значением. В этом случае вам нужен словарь, например:
NSMutableDictionary *myDict=[[NSMutableDictionary alloc] initWithCapacity:1];
[myDict setValue:@"someXMLvalue" forKey:@"media:thumbnail"];
NSString *myThumbnail=[myDict valueForKey:"media:thumbnail"];