【发布时间】:2013-06-09 13:02:37
【问题描述】:
我实现了旧的 init-as-a-factory 模式,但在一种特殊情况下(但不是其他情况!)我从分析器收到有关内存泄漏的警告。事实上,查看Cocoa Memory Management Policy 规则,它是alloc,而不是init,它可以返回+1-retain-count 对象。
看来:
- 严格来说,释放
self并从init返回一个新对象是违反规则的。 - 互联网上的许多地方都在推广这种技术,并且由于 alloc/init 的串联性质,这确实有效。
- 分析器有时会抱怨这一点,有时则不会。
那么……我们一直都做错了吗?
【问题讨论】:
-
你能发布一个导致编译器错误的sn-p吗?正如您所指出的,这是一种常见的模式,也是大多数类集群的实现方式。此外,在 init 可能失败的情况下,处理失败的弧前方法是释放 self 并返回 nil。
-
类集群基于抽象工厂设计模式。 Concepts in Objective-C Programming: Class Clusters
标签: objective-c