1

来自于保留和释放的前 ARC 思维方式,我试图在 ObjectiveC 中围绕 ARC 进行思考。

在 ARC 之前的日子里,任何返回新创建实例的方法都将使用自动释放池。

- (NSString *)description {
     NSString *output = [NSString stringWithFormat:@"max size is: %d", maxSize];
     return output;
 }

保留它是这个新创建实例的工作的接收者。

我很好奇。在ARC世界,你能做到吗?

- (NSString *)description {
     NSString *description = [[NSString alloc] initWithFormat:@"max size is: %d", maxSize];
     return description;
}

这在技术上可行吗?合乎逻辑吗?我的意思是——感觉不对。它会干扰保留计数,不是吗?

我的问题也适用于不同的吸气剂。例如:

- (NSArray *)items {
    return [NSArray arrayWithArray:items];
}

- (NSArray *)items {
    return [[NSArray alloc] initWithArray:items];
}

我了解 ARC 为您添加了保留和释放消息。我很想了解在这些情况下这是如何工作的。

4

1 回答 1

5

你可以使用任何一种——这就是 ARC 的美妙之处。它跟踪来自您的项目的每个对象,并知道它是否已经自动释放。所以是的,你可以混合。唯一的问题是如果你写一个库,你需要遵守命名约定,即 init 返回一个保留的对象。

于 2012-07-28T15:48:13.490 回答