gpt4 book ai didi

objective-c - Objective-C - init 是实现工厂的坏地方吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:24 26 4
gpt4 key购买 nike

我实现了旧的 init-as-a-factory 模式,但在一个特定情况下(但不是其他情况!)我从分析器收到有关内存泄漏的警告。事实上,看着 Cocoa Memory Management Policy规则,它是 alloc,而不是 init,它可以返回 +1-retain-count 个对象。

看来:

  1. 释放 self 并从 init 返回一个新对象,严格来说是违反规则的。
  2. 互联网上的许多地方都在推广这种技术,并且由于 alloc/init 的串联性质,它确实有效。
  3. 分析器有时会提示,有时不会。

那么……我们一直都做错了吗?

最佳答案

您可以像这样实现 init,它应该释放 self 以平衡 alloc 调用的保留计数。

- (id)initWithSomething:(id)something
{
[self release]; // don't need this line for ARC
self = nil;
return [[PrivateSubClass alloc] initWithSomething:something];
}

而且如果经常将 init 实现为工厂方法。例如NSArray, NSDictionary, NSString

关于objective-c - Objective-C - init 是实现工厂的坏地方吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17009872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com