Iphone 当使用arrayWithContentsOfURL时,许多保留放置在NSURL上

Iphone 当使用arrayWithContentsOfURL时,许多保留放置在NSURL上,iphone,nsarray,retain,Iphone,Nsarray,Retain,我正在从指向plist的URL创建一个NSArray NSLog(@"_url rc:[%d]",[_url retainCount]); //prints "_url rc:[1]" content = [NSArray arrayWithContentsOfURL:_url]; NSLog(@"_url rc:[%d]",[_url retainCount]); //prints "_url rc:[10]" 我完全不知道为什么会发生这种情况。如果您需要更多信息,请告诉我。请勿致电-重新登

我正在从指向plist的URL创建一个NSArray

NSLog(@"_url rc:[%d]",[_url retainCount]); //prints "_url rc:[1]"
content = [NSArray arrayWithContentsOfURL:_url];
NSLog(@"_url rc:[%d]",[_url retainCount]); //prints "_url rc:[10]"
我完全不知道为什么会发生这种情况。如果您需要更多信息,请告诉我。

请勿致电-重新登录。 对象的绝对保留计数是无用的,除非您的代码是唯一接触过该对象的东西。一旦您将对象传递给系统API,绝对保留计数就不再是您可以控制的了


正如克里斯所暗示的,对象的保留计数应完全视为增量。如果你使它增加,你应该使它减少。如果你保留,你必须释放。如果你复制,你必须发布。等等。

有什么问题吗?只要您处理好自己的保留和释放,框架也会这样做。很可能框架会为数组中的每个项执行保留操作,因为它会保留一个指向实际值的指针。或者别的什么。。。如果正确释放数组,url上的保留计数是否会降到1?如果是,没什么好担心的……我感谢您的帮助,我只是好奇为什么它会飙升到10。因为框架希望确保
NSURL
对象即使您释放它也能保持不变。:-)如果我猜,
arrayWithContentsOfURL:
正在对文档进行某种递归解析,
\uURL
可能被缓存机制保留/自动删除,并且在解析过程中会出现一些问题(如读取DTD等)。