0

如果我实例化一个 NSArray 并传递一个 NSMutableArray,它会变成一个 NSArray 还是只是看起来是一个。

即最终释放的可变数组

- (NSArray *)getObjectivesWithPerspective:(Perspective *)perspective
{
    NSMutableArray *result = [NSMutableArray array];

    for (ObjectiveManagedObject *objective in self.objectives)
    {
        if (objective.perspective.objectID == perspective.objectID) {
            [result addObject:objective];
        }
    }

    return [NSArray arrayWithArray:result];
}
4

3 回答 3

1

看到这个答案:https ://stackoverflow.com/a/1392051/254422

基本上,它将对象复制到一个新的、自动释放的、不可变的 NSArray 中。

使用 +array 创建的 NSMutableArray 是自动释放的。

于 2012-05-21T12:23:38.890 回答
0

作为NSMutableArray的子类NSArray,您可以result直接返回,而无需创建新NSArray对象:

- (NSArray *)getObjectivesWithPerspective:(Perspective *)perspective
{
    NSMutableArray *result = [NSMutableArray array];

    for (ObjectiveManagedObject *objective in self.objectives)
    {
        if (objective.perspective.objectID == perspective.objectID) {
            [result addObject:objective];
        }
    }

    return result;
}
于 2012-05-21T13:02:40.587 回答
0

您可以在此处找到有关此的一些信息:-arrayWithArray 实际上做了什么?. 但是你得到的数组应该是不可变的。NSArray 会将引用复制到不可变数组中。

如有疑问,请进行测试。从方法中获取一个数组,将其转换为 NSMutableArray 并尝试添加一个对象。执行此操作时应该会出现错误。

于 2012-05-21T12:23:38.307 回答