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会为您添加保留和释放消息.我很想知道在这些情况下它是如何工作的.
你也可以使用 - 这是ARC的美丽.它跟踪来自项目的每个对象,并知道它是否已经自动释放.所以是的,你可以混合.唯一的问题是如果你编写一个库,你需要遵守命名约定,即init返回一个保留的对象.