从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返回一个保留的对象。