调用创建当前类的类中的方法?

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】:

您需要自己创建它。一般模式是在您的子类中创建一个监听器分配,并且“父级”(更一般地,想要接收通知的对象)调用您建立的方法来分配一个监听器。如果您愿意,您可以让您的孩子保持多个听众,或者只保留一个听众。侦听器应该实现一些适合您计划如何传递数据的协议。

【讨论】:

以上是关于调用创建当前类的类中的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在AJAX中调用.CS中的类

Python中的类和方法使用举例

如何在java中子类中父类的对象如何调用父类的方法?

java面向对象基础复习

PHP怎么调用其他类的方法

静态方法怎么调用