首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在obj-c中的单例中存储实例引用

在obj-c中的单例中存储实例引用
EN

Stack Overflow用户
提问于 2012-10-30 10:49:58
回答 3查看 232关注 0票数 0

假设我有两个类,A和B。A是一个单例。我在B中声明了A,这样我就可以在B中的方法中访问单例变量。

然后,B创建另一个类的实例,比如类C。

然后,C创建另一个类的实例,比如类D。

我需要做的是在类B的实例中运行一个方法,来自类D,这就是让我发疯的原因。

我的第一个想法是在我的单例(类A)中引用类b的实例,类似于...

代码语言:javascript
运行
复制
sharedInstance.classBReference = self;

然后..and在类D中声明单例,然后在类D实例中使用类似下面的内容...

代码语言:javascript
运行
复制
[sharedInstance.classBInstance classBInstanceMethod];

当然,当我这么做的时候..

代码语言:javascript
运行
复制
classB *classBReference;

在我的单例的标题中,它对我进行了“未知类型”的游戏,我在这里读到了这个类型,所以我放了一个

代码语言:javascript
运行
复制
@class classB;

在@接口上,然后我可以声明...

代码语言:javascript
运行
复制
classB *classBReference;

没有未知类型的错误,但在类B的init方法中,这...

代码语言:javascript
运行
复制
sharedInstance.classBReference = self;

仍然会给出一个类型错误

“在类型为"class A*”(单例)的对象上找不到属性classBReference。是否要访问ivar classBReference?“

我不知道它为什么要这么做,解决方案是什么?或者有没有更好的方法来做我想做的事情?

EN

Stack Overflow用户

发布于 2012-10-30 11:08:26

通过避免使用全局变量(也就是单例变量),听起来就不会那么困惑了。当C创建B时,为B提供对C的引用。当D创建B时,为C提供对D的引用。

如果需要避免保留周期,请对B进行反向引用:weak (如果您的部署目标至少是iOS 5.0)或unsafe_unretained (如果您的部署目标早于iOS 5.0)。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13131977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档