NSString *xyz=[NSString stringWithFormat:@"%i %@",10,@"Sagar"];
Это создаст автоматически выпущенный экземпляр NSString - он будет освобожден при сливе пула автоматического выпуска (обычно при следующем цикле выполнения).
NSString *x2 = [xyz copy];
Теоретически -copy
сообщение создаст новый экземпляр объекта с сохранением счетчика 1 (то есть вы должны освободить его где-то), но поскольку объект NSString неизменен, то [копия xyz] будет оптимизирована для [сохранения xyz] и, таким образом, он будет указывать на тот же экземпляр.
NSString *x3=[xyz retain];
x3 будет указывать на тот же экземпляр, что и xyz (и x2), и его счетчик хранения будет увеличиваться - вы должны выпустить ваш объект куда-нибудь.
Теперь, как удалить все эти три
строки из памяти?
Убедитесь, что вы связываете все сохраняемые (копируемые) сообщения с выпуском и память освобождается.
Прочитайте Руководство по управлению памятью Objective-c для получения более подробной информации.