@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
答案 0 :(得分:5)
stringByAppendingString:
创建新字符串。请改用appendString:
:
[mutableString appendString:@“hello”]
答案 1 :(得分:3)
1)您的方法名称违反了命名约定:使用小写字母开头。
2)stringByAppendingString
返回一个新字符串作为结果,不会修改您的原始字符串。您应该使用[self.mutableString appendString:@"hello"];
代替。
3)您的init方法正在泄漏。您应该使用mutableString = [[NSMutableString alloc] init];
而不使用点语法,否则将retain
编辑(并且release
将丢失)。
答案 2 :(得分: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];
...因为在init
和dealloc
is not the best idea中使用了访问者。