我显然对此一无所获。

我正在解析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。最后,我只想确保编写可维护的代码。

最佳答案

在您的媒体资源中使用保留而不是复制。复制为您提供了一个不变的副本。

10-08 01:35