我显然对此一无所获。
我正在解析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]];
}
现在,此权限在这里有效。它会将所有我想要的元素组合在一起。但是,如果我尝试使用综合方法,则会发生关于更改不可变对象的错误,因此基本上将所有currentFoundCharacters替换为self.currentFoundCharacters。
也许我误解了何时以及为什么使用属性vs实例变量,但是在init方法之外,这样的印象给我留下了印象,那就是最好使用setter / getters。最后,我只想确保编写可维护的代码。
最佳答案
在您的媒体资源中使用保留而不是复制。复制为您提供了一个不变的副本。