当前位置:  开发笔记 > IOS > 正文

Objective C对象的两阶段构造

如何解决《ObjectiveC对象的两阶段构造》经验,为你挑选了1个好方法。

我一直在读RAII和单相与两相构造/初始化.无论出于何种原因,我直到最近一直处于两阶段阵营,因为在某些时候我一定听说过在构造函数中执行容易出错的操作是不好的.但是,我认为我现在确信单相是可取的,基于我在SO和其他文章中读过的问题.

我的问题是:为什么Objective C几乎专门为非便利构造函数使用两阶段方法(alloc/init)?这种语言有什么特定的原因,还是只是设计师的设计决定?



1> Rob Napier..:

我有一个令人羡慕的情况,那就是+alloc在1991年写回来的那个人,几个月前我偶然问他一个非常相似的问题.添加+alloc是为了提供+allocWithZone:,这是为了在NeXTSTEP 2.0中添加内存池,内存非常紧张(4M).这允许调用者控制在内存中分配对象的位置.这是一个替代+new和它的亲属,它是(并且仍然是,虽然没有人使用它)一个基于Smalltalk的单相构造函数new.当Cocoa来到Apple时,使用+alloc已经根深蒂固,并且没有回头+new,即使实际选择你NSZone很少有重要价值.

所以这不是一个很大的单阶段/两阶段哲学问题.在实践中,Cocoa具有单阶段构造,因为你总是(并且总是应该)在一次调用中背对背地调用它们而不对其进行测试+alloc.您可以将其视为一种精心设计的"新"输入方式.


+1哇,我不能要求更好的答案
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有