ObjectiveC中的ARC如何改变自动释放的使用?(例如在描述方法中)

Guy*_*Guy 1 memory-management objective-c ios5

来自ARC之前考虑保留和释放的方式,我试图在目标C中围绕ARC.

在ARC前几天,任何返回新创建的实例的方法都将使用自动释放池.

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

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

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

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

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

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

- (NSArray *)items {
    return [NSArray arrayWithArray:items];
}
Run Code Online (Sandbox Code Playgroud)

- (NSArray *)items {
    return [[NSArray alloc] initWithArray:items];
}
Run Code Online (Sandbox Code Playgroud)

我知道ARC会为您添加保留和释放消息.我很想知道在这些情况下它是如何工作的.

Dav*_*d H 5

你也可以使用 - 这是ARC的美丽.它跟踪来自项目的每个对象,并知道它是否已经自动释放.所以是的,你可以混合.唯一的问题是如果你编写一个库,你需要遵守命名约定,即init返回一个保留的对象.