Чтобы добавить к сообщениям Джошуа и Престона, на самом деле [NSString stringWithString:xxx]
возвращает само xxx
, когда xxx
является литералом.Это подробности реализации, поэтому вам не следует писать какую-либо программу, основанную на этом факте, но интересно знать.
Этот факт можно проверить следующим образом:
NSString*a=@"foo";
NSString*b=[NSString stringWithString:a];
NSLog(@"a at %p, class %@",a,[a class]);
NSLog(@"b at %p, class %@",b,[b class]);
По крайней мере, намой ящик 10.6.3, оба дают один и тот же адрес с классом NSCFString
.
Помните: retain
& release
относятся к вашей ответственности за владение, и они не всегда уменьшают / увеличиваютсохранить счет.Реализация может делать любую оптимизацию, какую захочет, если указанная оптимизация не нарушает политику владения.
Или другими словами: напишите retain
& release
, чтобы объекты были сохранены / уничтожены в том случае, если реализация всегда делает наивное увеличение / уменьшение количества сохраняемых объектов.Это контракт между Какао и тобой.Но Какао может сделать и действительно много оптимизирует.