gpt4 book ai didi

objective-c - 从具有 NSArray 返回值的方法返回 NSMutableArray 对象

转载 作者:太空狗 更新时间:2023-10-30 03:24:07 24 4
gpt4 key购买 nike

当从使用 NSMutableArray 动态构建数组的方法返回 NSArray(或 NSDictionary 等)时,什么是在使用 ARC 时执行此操作并避免随机内存泄漏的标准方法吗?

例如,假设我们有一些带有名称列表的类,我们想手动过滤并获取所有以给定字母开头的名称:

- (NSArray *)getNamesByFirstLetter:(NSString *)firstLetter 
{
NSMutableArray *returnValue = [[NSMutableArray alloc] init];
for(id item in self.names)
{
if([item hasPrefix:firstLetter])
{
[returnValue addObject:item];
}
}
return returnValue; // just return the above array
}

说到返回值,我可以想到四种可能的方式:

  1. 直接返回NSMutableArray(如上)

    return returnValue;
  2. 返回一个副本

    return [returnValue copy];
  3. 使用 NSArray arrayWithArray 返回:

    return [NSArray arrayWithArray:returnValue];
  4. 创建一个NSArray,手动设置NSMutableArraynil:

    NSArray *temp = [NSArray arrayWithArray:returnValue]; // could use [returnValue copy] here too
    returnValue = nil;
    return temp;

当程序使用 ARC 时,这四种方法之间有什么真正的区别,还是只是归结为个人喜好?

此外,除了可能的内存泄漏之外,使用一种方法替代另一种方法时是否还有其他影响?

请注意,如果这是重复的,请告诉我,我会记下这个问题。我尝试搜索,但很难将问题浓缩为几个搜索词。

最佳答案

在启用 ARC 的情况下,您的所有四个选项都没有问题(即,您提出的所有解决方案都不会导致内存泄漏)。

但是,您概述的 4 种解决方案的作用略有不同。数字 1 将返回一个 NSMutableArray,这可能不会导致问题,因为 NSMutableArray 将响应与 NSArray 相同的所有消息(但返回的对象将是可变的,这可能是您不希望的)。

选项 2 与选项 3 和 4 之间存在细微差别(在 ARC 下它们是相同的)。如果 returnValuenil,选项 2 将返回 nil,但选项 3 和 4 将返回一个空的 NSArray。 (任何一种行为都可能是理想的;您应该决定您希望此方法的行为方式)。此外,-copy 可能比 +arrayWithArray 更快。​​

我会选择选项 2。

关于objective-c - 从具有 NSArray 返回值的方法返回 NSMutableArray 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com