objectiveC中的ARC如何更改自动释放程序的使用?(例如在描述方法中)



从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;
}

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

我的问题也适用于不同的getter。例如:

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

可以是

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

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

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

最新更新