将字符串附加到NSMutableString

时间:2010-04-01 05:56:55

标签: objective-c nsmutablestring

现在一直在看这个并不理解为什么这个简单的代码会引发错误。缩短为简洁起见:

NSMutableString *output;

...

@property (nonatomic, retain) NSMutableString *output;

...

@synthesize output;

...

// logs "output start" as expected
output = [NSMutableString stringWithCapacity:0];
[output appendString:@"output start"];
NSLog(@"%@", output);

...

// error happens here
// this is later on in a different method
[output appendString:@"doing roll for player"];

有人能发现我的错误吗?

2 个答案:

答案 0 :(得分:2)

更改行

output = [NSMutableString stringWithString:@"output start"]

[self setOutput:[NSMutableString stringWithString:@"output start"]]

(或self.output = ...如果您更喜欢这种表示法。)

虽然您声明了一个属性,但您没有使用该setter,因此您不会保留该字符串。

答案 1 :(得分:1)

解决方案实际上与保留有关,如用户invariant所示。类方法:

output = [NSMutableString stringWithCapacity:0];

返回autorelease NSMutableString。当分配给我的输出属性 - 看起来,即使使用retain标志 - 它也没有保留它。解决方案是自己分配它而不是自动释放:

output = [[NSMutableString alloc] initWithCapacity:0];

然后保留工作。任何关于为什么会受到欢迎的解释。

修改

弄清楚原因。我直接访问实例变量而不是通过我合成的getter / setter。有关blog的更多信息。