Objective c “弱”;分配;引用而非单例

Objective c “弱”;分配;引用而非单例,objective-c,Objective C,我有许多对象引用同一类存储的数据。在以前的节目中,我使用过单身,但我试图放弃这种做法,只在必要时作为最后手段使用,主要是因为他们的坏名声(事实上,我过去也滥用过他们) 但我想知道我的新技术有多大的优势。我只是简单地创建对同一组数据的弱引用,以便一组类指向同一内存以根据需要提取数据。例如: @property(非原子,赋值)MyDataClass*mydata 在类的自定义init中,我将引用作为方法参数传递,然后属性分配给该引用 这是一种有效的、可接受的做事方式吗?与使用单例相比,我很难找到这样

我有许多对象引用同一类存储的数据。在以前的节目中,我使用过单身,但我试图放弃这种做法,只在必要时作为最后手段使用,主要是因为他们的坏名声(事实上,我过去也滥用过他们)

但我想知道我的新技术有多大的优势。我只是简单地创建对同一组数据的弱引用,以便一组类指向同一内存以根据需要提取数据。例如:

@property(非原子,赋值)MyDataClass*mydata

在类的自定义
init
中,我将引用作为方法参数传递,然后
属性
分配给该引用


这是一种有效的、可接受的做事方式吗?与使用单例相比,我很难找到这样做的组织优势

通常,您应该只对多个对象不存在意义的对象使用单例类。否则,最好避免它们,因为它们引入了耦合:每个使用单例的类最终都与单例紧密耦合

传递对内容的引用是可以的。当然,它们不必是弱引用,除非在必要的情况下为了避免保留循环


如果你发现你在大量的类之间传递相同的对象,你可能会考虑考虑职责划分和重构你的应用程序。

你使用的模式很好,最终,这种模式在所有标准C++程序中都使用,而不需要引用计数或其他高级内存管理工具。唯一需要确保对象层次结构严格尊重引用的弱点,即具有引用的对象对该引用后面的对象的依赖性。换句话说,您必须始终确保在引用之前删除引用的所有者,并且必须手动确保,因为您没有使用引用计数

这意味着对程序员来说,你要承担更多的责任,因为你总是要完全控制你的对象的生命周期。模式很容易出错,因为您无法从具有弱引用的代码中知道原始对象是否仍然存在或已被删除。您必须使用您的设计模式来确保这一点

出于这个原因,我不建议“混合”这两种方法,即对对象的弱引用可能会被
retain
type属性(当属性的值从对象更改时)、
autorelease
ARC
释放而失去控制


引用计数的引入是为了免除程序员的这一责任,并使编写安全代码变得更容易。你的模式很好,它被数百万个C++程序使用,但是你必须意识到你的责任。 保留/分配和使用单例并不是相互排斥的模式。我不会对单身汉犹豫不决,我刚开始玩iOS的时候是这样的

作为一名java web应用程序开发人员,由于紧密耦合,单例是不好的,特别是因为如果您想跨负载平衡器(现在是云)分发应用程序。。。那么你的单身汉将成为一个瓶颈,而且不容易扩展

使用单例进行单元测试也存在问题,在测试期间必须重置它的状态,甚至尝试模拟它


然而,在Objective-C和iOS开发中,我并没有看到单身人士有那么多缺点。你的应用程序不会被扩展,sdk中已经满是单例,阻碍了你的单元测试。

为什么这是
分配
而不是
保留
?因为它是一个弱引用,并且类不拥有对象