Я записал сообщение в блоге об этом: http://blogs.msdn.com/kirillosenkov/archive/2009/01/31/foreach.aspx
можно голосовать здесь, если требуется видеть этот метод в.NET 4.0: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=279093
NSString
- неизменяемое представление (или, в худшем случае, представление только для чтения). Таким образом, вам нужно будет либо привести к NSMutableString
, если вы знаете, что он изменяемый, либо сделать изменяемую копию:
-(void)st:(NSString *)st
{
NSMutableString *str = [[st mutableCopy] autorelease];
NSLog(@"string: %@", str);
}
Я выпустил его автоматически, потому что mutableCopy
возвращает вновь инициализированную копию с сохраненным счетчиком из 1.
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];
Важно! mutableCopy
возвращает объект, которым вы владеете, поэтому вы должны либо освободить, либо автоматически освободить его.
Вы можете установить NSMutableString на NSString, но не наоборот,
NSString *str = [NSMutableString alloc]init];
- это нормально, а
NSMutableString *str = [[NSString alloc]init];
- нет. Это потому, что NSMutableString является подклассом NSString, поэтому это «NSString». Однако вы можете создать изменяемую строку из NSString с помощью
NSMutableString *mStr = [str mutableCopy];