objective-c - 这增加了保留计数 : alloc or init?

标签 objective-c init retaincount alloc

当我们需要创建一个对象并取得它的所有权时,我们编写

NSObject *someObject = [[NSObject alloc] init];

之后someObject的retain count会等于1,哪个方法会增加这个count,alloc还是init,where in Apple 的文档是否描述了这种行为?

最佳答案

After that someObject's retainCounter will be equal 1. Question is which method increases retainCounter alloc or init and there in Apple docs this behavior is described?

“两者都不”、“两者”或“一个或另一个”都是正确答案。更好的答案是“这是一个实现细节,您需要关注一般的、不依赖于实现的规则”。

首先,摒弃绝对保留计数的概念。这是一种无用的思考方式。

+alloc 返回一个保留计数为 +1 的对象。 +alloc 返回的任何内容都必须在某处-released。实际保留计数是否为 1 完全是一个实现细节,对于许多 Apple 类,它通常不是1。

-init 消耗消息对象的保留计数并生成保留计数 +1(不是 1,而是“加 1”)的对象;从 init 返回的结果必须是 released 才能被正确管理。

通常情况下,init 只是调用 return self; 而不会在内部操纵保留计数。这保留了上述规则。

但有时它不会,这就是为什么您总是必须在初始化器中使用 self = [super init](当然是检查返回值) 为什么你永远不应该做像 Foo *f = [Foo alloc]; 这样的事情[f 初始化];

关于objective-c - 这增加了保留计数 : alloc or init?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10253505/

相关文章:

python - 避免 Python 中的冗余

objective-c - RetainCount 可以在这种情况下使用吗?

objective-c - 为什么发送 retainCount 到 @"Hi"返回 -1?

Objective-C 对字符串值的反编译保护

ios - fetchRequest 返回空数组

ios - Objective-C项目使用Swift遇到不兼容

ios - 谷歌分析跟踪没有遗产

ios - Init、带参数的 Init 和 Convenience Init

javascript - npm init 中的 --yes 参数是什么意思?

swift - 同步调度的保留计数如何工作?