tags:

views:

451

answers:

3

Is there any way to initialize NSString to NSMutable String? and also reverse order?-

-(void)st:(NSString *)st
{
  NSMutableString str =  st; // gives warning..
  NSLog(@"string: %@", str);


}
+1  A: 

You can set an NSMutableString to an NSString, but not the other way around

NSString *str = [NSMutableString alloc]init];

is okay, but

NSMutableString *str = [[NSString alloc]init];

is not. This is because an NSMutableString is a subclass of NSString, so it 'is a' NSString. You can however create a mutable string from an NSString with

NSMutableString *mStr = [str mutableCopy];
Joe Cannatti
+1  A: 
NSString *someImmutableString = @"something";
NSMutableString *mutableString = [someImmutableString mutableCopy];

Important! mutableCopy returns an object that you own, so you must either release or autorelease it.

Sbrocket
+4  A: 

NSString is an immutable representation (or a readonly view at worst). So you would need to either cast to a NSMutableString if you know it's mutable or make a mutable copy:

-(void)st:(NSString *)st
{
  NSMutableString *str =  [[st mutableCopy] autorelease];
  NSLog(@"string: %@", str);
}

I autoreleased it because mutableCopy returns a newly initialized copy with a retain count of 1.

notnoop
I don't know if this will work how it is, but the NSMutableString should be a pointer NSMutableString *str = [[st mutableCopy] autorelease];
Joe Cannatti
Good catch, thanks! That was just a typo.
notnoop