2
@interface MainView : UIView { 
    NSMutableString *mutableString; 
}
@property (nonatomic, retain) NSMutableString *mutableString;
@end

@implementation MainView
@synthesize mutableString;

-(void) InitFunc {  
    self.mutableString=[[NSMutableString alloc] init];
 }

-(void) AppendFunc:(*NString) alpha { 
    [self.mutableString stringByAppendingString:@"hello"];
    NSLog(@"the appended String is: %@",self.mutableString);
    int len=[self.mutableString length];
}

嘿大家,

我只想知道我在哪里做错了???. 我尝试了这段代码,但“mutableString”没有附加任何值(因为“len”的值是“0”并且 NSLog 没有为“mutableString”打印任何值),虽然我已经在网上搜索了解决方案,但人们在同样的时尚,但我不知道为什么我的代码不起作用。

提前致谢

MGD

4

3 回答 3

5

stringByAppendingString:创建新字符串。改用appendString:

[可变字符串追加字符串:@“你好”]

于 2010-11-28T10:21:16.663 回答
3

1)您的方法名称违反了命名约定:使用小写字母开头。

2)stringByAppendingString结果返回一个新字符串并且不修改您的原始字符串。你应该[self.mutableString appendString:@"hello"];改用。

3)您的 init 方法正在泄漏。您应该使用mutableString = [[NSMutableString alloc] init];而不是使用点语法,retain否则它将被编辑(并且 arelease会丢失)。

于 2010-11-28T10:23:42.130 回答
1

天哪,真是一团糟。stringByAppendingString不会更改字符串,它会创建并返回一个新字符串:

// Sets str2 to “hello, world”, does not change str1.
NSMutableString *str1 = [NSMutableString stringWithString:@"hello, "];
NSString *str2 = [str1 stringByAppendingString:@"world"];

如果要更改可变字符串本身,请使用以下appendString方法:

// Does not return anything, changes str1 in place.
[str1 appendString:@"world"];

此外,这是一个泄漏:

self.mutableString = [[NSMutableString alloc] init];

这最好写成:

mutableString = [[NSMutableString alloc] init];

…因为在initand中使用访问dealloc 器并不是最好的主意

于 2010-11-28T10:22:51.610 回答