实例化一个NSArray传递一个可变数组更改数组变为可变?

时间:2012-05-21 12:02:35

标签: iphone objective-c

如果我实例化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];
}

3 个答案:

答案 0 :(得分:1)

请参阅此答案:https://stackoverflow.com/a/1392051/254422

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

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

答案 1 :(得分:0)

您可以在此处找到有关此内容的一些信息:what does -arrayWithArray actually DO?。但是你得到的数组应该是不可变的。 NSArray会将引用复制到不可变数组中。

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

答案 2 :(得分:0)

由于NSMutableArrayNSArray的子类,您可以直接返回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;
}
相关问题