来自 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 的数据

c_cpp 来自范围的NSArray

获取当前邮政编码,并显示来自 NSArray 的最接近的结果

来自 plist 的 UITableView 加载到字典的 NSArray

遍历来自 NSArray 的数据并从 url 中提取 UIImage