我显然没有得到这个。
我正在解析一个XML文档,因此我有一个NSMutableString可以附加到其中一个元素,因为foundCharacters会被截断并分成几部分。我可以把这一切都搞定但我不明白为什么以某种方式做它不起作用。
@property (copy, nonatomic) NSMutableString *currentFoundCharacter;
这就是我为ViewController声明属性的方法。
然后我有:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (!currentFoundCharacter) {
currentFoundCharacter = [[NSMutableString alloc] init]; // Have to do this or new strings never append to it.
}
if ([currentAttribute compare:@"description"] == NSOrderedSame && currentAttribute.length > 1) {
[currentFoundCharacter appendString:[string copy]];
}
现在这就行了。它将在我想要的所有元素中组合。但如果我尝试使用合成方法,我会收到有关改变不可变对象的错误,所以基本上用self.currentFoundCharacters替换所有currentFoundCharacters。
也许我误解了何时以及为什么使用属性vs实例变量但在init方法之外,这样我觉得最好使用setter / getters。最后,我只想确保编写可维护的代码。
答案 0 :(得分:3)
在您的媒体资源中使用保留而非复制。复制为您提供不可变的副本。