Будет ли этот бит кода вызывать утечки памяти? Правильно ли это изменить значения NSString?iOS: изменение значения NSString
NSString * enemiesAndElementsTextureFileName = @"bla bla";
enemiesAndElementsTextureFileName = @"bl";
Будет ли этот бит кода вызывать утечки памяти? Правильно ли это изменить значения NSString?iOS: изменение значения NSString
NSString * enemiesAndElementsTextureFileName = @"bla bla";
enemiesAndElementsTextureFileName = @"bl";
Этот способ не вызывает утечек памяти, и это действительно правильно. В этом случае вам не понадобится NSMutableString
, потому что вы сами не изменяете строковый литерал, вы просто заменяете строковое значение на новое (заменяя @ «bla bla» на @ «bl»).
В этом случае, однако, ваша строка теперь будет «бл», так что вы можете удалить, что первое значение строки и просто NSString * enemiesAndElementsTextureFileName = @"bl";
Да NSString выделяется один раз. Это один из способов
... вы говорите «да, правильно» или «да, это приведет к утечке памяти»? Я предполагаю первый вариант. Итак, предыдущая строка не будет пропущена в памяти где-нибудь? – mm24
Даже если он не был выделен, литерал @ "foo" буквально равен '[[NSString alloc] initWithString: @" foo "];' – Anupdas
да, это правильный путь –
Да, используйте NSMutableString со следующим методом, как ваши потребности:
// Allocate
NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
// set string content
[str setString:@"1234"];
// Append
[str appendString:@"567"];
// Concat
[str appendFormat:@"age is %i and height is %.2f", 27, 1.55f];
// Replace
NSRange range = [str rangeOfString:@"height"];//查找字符串height的位置
[str replaceCharactersInRange:range withString:@"no"];
// Insert
[str insertString:@"abc" atIndex:2];
// Delete
range = [str rangeOfString:@"age"];
[str deleteCharactersInRange:range];
NSLog(@"%@", str);
Вы должны использовать 'NSMutableString'. – syclonefx
Это не приведет к утечке памяти. Это действительный код и очень распространенное использование, поэтому вы можете уточнить, почему вы сомневаетесь, что все может пойти не так. – tia