2013-06-09 3 views
0

Будет ли этот бит кода вызывать утечки памяти? Правильно ли это изменить значения NSString?iOS: изменение значения NSString

NSString * enemiesAndElementsTextureFileName = @"bla bla"; 
enemiesAndElementsTextureFileName = @"bl"; 
+0

Вы должны использовать 'NSMutableString'. – syclonefx

+1

Это не приведет к утечке памяти. Это действительный код и очень распространенное использование, поэтому вы можете уточнить, почему вы сомневаетесь, что все может пойти не так. – tia

ответ

2

Этот способ не вызывает утечек памяти, и это действительно правильно. В этом случае вам не понадобится NSMutableString, потому что вы сами не изменяете строковый литерал, вы просто заменяете строковое значение на новое (заменяя @ «bla bla» на @ «bl»).

В этом случае, однако, ваша строка теперь будет «бл», так что вы можете удалить, что первое значение строки и просто NSString * enemiesAndElementsTextureFileName = @"bl";

1

Да NSString выделяется один раз. Это один из способов

+0

... вы говорите «да, правильно» или «да, это приведет к утечке памяти»? Я предполагаю первый вариант. Итак, предыдущая строка не будет пропущена в памяти где-нибудь? – mm24

+0

Даже если он не был выделен, литерал @ "foo" буквально равен '[[NSString alloc] initWithString: @" foo "];' – Anupdas

+1

да, это правильный путь –

1

Да, используйте 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); 
Смежные вопросы