1

我在调用类中使用前向声明。

ClassTwo 中的.h 文件

@class ClassOne

@property(nonatomic,retain) ClassOne *class_One;

.m 文件

@synthesize class_One;

然后我试图在 ClassOne 中调用这个方法

[self.class_One callingThisMethodFromClassTwo];

另一方面,如果我在 ClassOne 中创建一个共享实例并将其用作类方法,则它可以工作

[[ClassOne Shared] nowItWorks];

抱歉,如果这是一个愚蠢的问题,我很新

4

3 回答 3

1

尝试分配 class_One 实例并添加#import "ClassOne.h"到您顶部的标题中 classtwo.m

self.class_One= [[ClassOne alloc]init]; 
[self.class_One callingThisMethodFromClassTwo];
于 2013-01-23T19:05:23.653 回答
0

如果[self.class_One callingThisMethodFromClassTwo];失败......这直接指的是

  1. class_One 不是 alloc+init-ed。

  2. 或者callingThisMethodFromClassTwo是私有/受保护的方法。

  3. 或者callingThisMethodFromClassTwo是一个类方法。

于 2013-01-23T19:07:38.503 回答
0

我建议你使用Protocol/Delegate这个问题。

你应该为你的类声明一个委托协议。Foo 类的委托协议和接口的示例可能是这样的:

@protocol MyClassDelegate

// 必需意味着如果他们想使用委托,他们// 必须实现它。@required // 你想从另一个类调用的方法。- (void)taskComplete:(BOOL)完成;@结尾

@interface MyClass : NSObject { // 我们不知道在编译时会采用什么样的类,这就是为什么这是一个 id id 委托;}

@property (nonatomic, assign) id 委托;

  • (无效)任务完成;
  • (void)doSomeTask;

假设您有一个复杂的项目并且不想在您的类之间创建大量链接,在这种情况下,像这样的委托将是您实现的最佳方式。这就像函数指针和回调一样,但通信很容易双向进行。是时候采用我们的协议并在课堂上实际使用它了。

myClass = [[MyClass alloc] init];
// Very important. If we don't let myClass know who the delegate
// is we'll never get the protocol methods called to us.
[myClass setDelegate:self];

在这种情况下,您可以从另一个类调用方法。我希望这能帮到您。

于 2013-01-23T19:35:24.953 回答