Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在创建当前类的类中调用方法?_Objective C_Ios_Class_Methods_Parent Child - Fatal编程技术网

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

Objective c 在创建当前类的类中调用方法?,objective-c,ios,class,methods,parent-child,Objective C,Ios,Class,Methods,Parent Child,这一个更难解释:我有ClassA,它有MethodA,它对ClassA中的一些对象执行一些操作,假设它设置了几个标签 ClassA还创建了ClassB的一个实例,它是一个侧栏视图。我需要ClassB对ClassA中的对象执行与MethodA相同的操作,更新ClassA实例中的标签 我需要ClassB能够调用MethodA,但是让它作用于创建ClassB实例的ClassA的特定实例 这些类(至少目前)并不相互继承,因为它们实际上还没有共享任何东西。我将ClassA中的一些数据填充到ClassB的标

这一个更难解释:我有
ClassA
,它有
MethodA
,它对
ClassA
中的一些对象执行一些操作,假设它设置了几个标签

ClassA还创建了
ClassB
的一个实例,它是一个侧栏视图。我需要ClassB对ClassA中的对象执行与MethodA相同的操作,更新ClassA实例中的标签

我需要ClassB能够调用MethodA,但是让它作用于创建ClassB实例的ClassA的特定实例

这些类(至少目前)并不相互继承,因为它们实际上还没有共享任何东西。我将ClassA中的一些数据填充到ClassB的标签中,现在我需要做相反的事情

我不能从类B中调用
[super MethodA]
,因为它们不继承。我需要的是类似于
[parent methodA]
的东西,它将在创建此ClassB对象的类中调用该方法,并使其作用于ClassA的特定实例


这样的事情存在吗?道歉,乱七八糟的帖子,我不知道该怎么搜索这样一个模糊的问题。

你需要自己创建这个。一般模式是在子类中创建侦听器分配,“父类”(更一般地说,是希望接收通知的对象)调用您建立的方法来分配侦听器。如果愿意,您可以允许您的孩子维护多个侦听器,或者只维护一个侦听器。侦听器应该实现一些适合于您计划如何传递数据的协议。

否,如果您使用的是组合,那么您需要一种外部方式来引用包含客户端的类

更简单的方法是在实例化对象时传递父对象:

@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将需要对其父类a对象的弱引用