来自 NSArray 的 NSMutableArray
Posted
技术标签:
【中文标题】来自 NSArray 的 NSMutableArray【英文标题】:NSMutableArray from NSArray 【发布时间】:2010-12-07 02:19:36 【问题描述】:我有以下代码,我想使用 NSMutable 数组而不是 NSArray 你能告诉我如何加载 NSMutable 数组,因为当前方法不起作用。
-(void) whatever
NSData *htmlData = [[NSString stringWithContentsOfURL:[NSURL URLWithString: @"http://www.objectgraph.com/contact.html"]] dataUsingEncoding:NSUTF8StringEncoding];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:htmlData];
NSArray *titles = [xpathParser search:@"//h3"]; // get the page title - this is xpath notation
TFHppleElement *title = [titles objectAtIndex:0];
NSString *myTitles = [title content];
NSArray *articles = [xpathParser search:@"//h4"]; // get the page article - this is xpath notation
TFHppleElement *article = [articles objectAtIndex:0];
NSString *myArtical = [article content];
我试过了:
NSMutableArray *titles = [xpathParser search:@"//h3"];
但它确实加载了值?
【问题讨论】:
【参考方案1】:您可以在NSArray
对象上调用mutableCopy
以向您返回NSMutableArray
。
请注意,由于方法名称包含“复制”,因此被调用者将获得该对象的所有权。
(Apple's memory management guide 声明包含“alloc”、“new”或“copy”字样的方法名称按照惯例应返回您拥有的对象,因此必须在某个时候放弃所有权。)
【讨论】:
我会投票给你,但你写了“按照惯例,应该返回一个引用计数 = 1 的对象”,这在技术上是错误的。事实上,如果您阅读自己的链接,您会发现它甚至没有在对象所有权政策部分使用“保留计数”一词。 你没有抓住重点。 Apple 的内存管理指南说约定是您拥有该对象。保留计数为 1 是一个实现细节(无论如何,这并不总是正确的)。【参考方案2】:就像这样:
NSArray* someArray = [xpathParser search:@"//h3"];
NSMutableArray* mutableArray = [someArray mutableCopy];
字面意思就是这样。
【讨论】:
【参考方案3】:假设[xpathparser ...]
返回NSArray
,您可以使用:
NSMutableArray *titles = [NSMutableArray arrayWithArray:[xpathParser search:@"//h3"]];
【讨论】:
+[NSMutableArray arrayWithArray:]
有自动释放的好处——如果你使用-[NSArray mutableCopy]
,你需要自己释放/自动释放。
Nick Forge 的评论现在在 ARC 下是否无关紧要?
@BasilBourque 不,一些较旧但仍在维护的应用程序仍在使用 MRR
如果您使用 MRC,我仍然会推荐我的方式,如果您希望它自动发布,请确保使用 [[someArray mutableCopy] autorelease]
。以上是关于来自 NSArray 的 NSMutableArray的主要内容,如果未能解决你的问题,请参考以下文章
搜索字符串是不是包含来自 Nsdictionary 的 NSArray 的任何值
在 NSTableView 中显示来自 NSArray 的数据
获取当前邮政编码,并显示来自 NSArray 的最接近的结果