调用创建当前类的类中的方法?
Posted
技术标签:
【中文标题】调用创建当前类的类中的方法?【英文标题】:Call a method in the class that created the current class? 【发布时间】:2012-12-03 17:17:05 【问题描述】:这个更难解释:我有ClassA
,它有MethodA
,它对ClassA
中的一些对象做了一些事情,假设它设置了几个标签。
ClassA 还创建了一个ClassB
的实例,它是一个侧边栏视图。我需要 ClassB 对 ClassA 中的对象执行与 MethodA 相同的操作,更新 ClassA 实例中的那些标签。
我需要 ClassB 才能调用 MethodA,但让它作用于创建 ClassB 实例的 ClassA 的特定实例。
这些类(至少目前)不会相互继承,因为它们实际上还没有共享任何东西。我将 ClassA 中的一些数据填充到 ClassB 的标签中,现在我需要做相反的事情。
我不能从 ClassB 中调用 [super MethodA]
,因为它们不继承。我需要的是类似于 [parent methodA]
的东西,它会在创建此 ClassB 对象的类中调用该方法,并让它作用于 ClassA 的特定实例。
这样的事情存在吗?道歉,混乱的帖子,我不知道该搜索什么来寻找这样一个模糊的问题。
【问题讨论】:
【参考方案1】:不,如果您正在使用组合,那么您需要一种外部方式来引用包含客户端的类。
更简单的方法是在实例化对象时传递父对象:
@interface ClassB
ClassA *parent;
-(id)initWithA:(ClassA*)parent;
@property (readonly, retain) ClassA *parent;
@end
@implementation ClassB
-(id)initWithA:(ClassA*)parent
if ((self = [super init]))
self.parent = parent;
return self;
@end
这样你就可以在ClassB
:
-(void)method
[parent updateThings:params];
请注意,在这种情况下,由于两个类声明都是交叉引用的,因此您需要在头文件中进行前向声明(例如 @class ClassA
)才能使其编译。
【讨论】:
如果 ClassA 对 ClassB 对象有强引用,那么 ClassB 需要对其父 ClassA 对象进行弱引用【参考方案2】:您需要自己创建它。一般模式是在您的子类中创建一个监听器分配,并且“父级”(更一般地,想要接收通知的对象)调用您建立的方法来分配一个监听器。如果您愿意,您可以让您的孩子保持多个听众,或者只保留一个听众。侦听器应该实现一些适合您计划如何传递数据的协议。
【讨论】:
以上是关于调用创建当前类的类中的方法?的主要内容,如果未能解决你的问题,请参考以下文章