从Objective-C中其他类的实例访问类方法

从Objective-C中其他类的实例访问类方法,objective-c,oop,Objective C,Oop,假设我有类A和类B。在类A中我创建了类B的一个实例。类B有委托方法,当调用时,我想调用类A中的实例方法。有没有方法在实例化类B时传递对类A的引用?将类型A的属性添加到B中,并在初始化后将self分配给它。您还可以将self作为参数传递给您提到的委托方法。实际上,这是cocoa中的常见做法(查看UITableViewDelegate)您可以使用typeClass将引用传递给类。对于类A使用[A类]获取参考。但请注意,使用常规类引用,您将无法简单地编写[aClassRef aClassMethod]

假设我有类A和类B。在类A中我创建了类B的一个实例。类B有委托方法,当调用时,我想调用类A中的实例方法。有没有方法在实例化类B时传递对类A的引用?

将类型A的属性添加到B中,并在初始化后将
self
分配给它。您还可以将
self
作为参数传递给您提到的委托方法。实际上,这是cocoa中的常见做法(查看
UITableViewDelegate

您可以使用type
Class
将引用传递给类。对于类
A
使用
[A类]
获取参考。但请注意,使用常规类引用,您将无法简单地编写
[aClassRef aClassMethod]
,因为
class
instancecce可以引用任何类(因此编译器不知道是否支持特定的方法)


实际的解决方案应该更接近,但也许这个注释在某种程度上也会有用。

您可以使用委托将信息返回给第一个类

B.h类

@protocol delegateB <NSObject>
-(void)doSomething:(NSString *)data;
@end

@interface ClassB : UIViewController

@property(nonatomic, assign) id<delegateB> delegate; 

@end
在A级:

A.h类

@interface ClassA : UIViewController

-(void)doSomething:(NSString *)data;

@end
上午班

当您实例该类时,需要分配self:

ClassB *cb = [[ClassB alloc] init];
cb.delegate = self;
要使用该功能,请执行以下操作:

-(void)doSomething:(NSString *)data{
    //do something whit the data
}

如果您真的在谈论类方法(例如
+(void)method;
),那么您不需要引用。如果它们是实例方法(例如
-(void)method;
),则需要参考。谢谢-实际上,我的问题只是对代理缺乏理解!为什么
delegateA
没有实际命名为
delegateB
?这是一个由
ClassB
定义的协议,不应该有与之相关的
ClassA
的指示。而且不要忘记添加
@interface ClassA()@结束
ClassA.m
-(void)doSomething:(NSString *)data{
    //do something whit the data
}