实例方法调用类方法调用实例方法

Eri*_*sen 5 iphone objective-c

总之,怎么样?

我有一个视图控制器,可以创建一些自定义对象.其中一个对象需要在控制器中调用一个方法.该对象看起来好像要在控制器中调用一个类方法,这可能没问题,除了控制器中的类需要调用控制器中的实例方法,并且它似乎不想这样做.那有意义吗?

如果没有,这是伪代码:


ViewController.m

#import "customObj.h"
-(void)viewDidLoad{
  foobar=@"string";//declared in ViewController.h
}
-(void)createObj{
  foobar=@"different string";
  customObj *customObjInstance=[[customObj alloc] init];
}

---

customObj.m

#import "ViewController.h"
-(void)callBack{
  [ViewController createObj];
}
Run Code Online (Sandbox Code Playgroud)

好吧,所以当callBack运行时,它会出错,说它正在寻找+ createObj(而不是-createObj).我可以将createObj更改为类方法,但是设置foobar时出现问题,因为foobar在-viewDidLoad中初始化,我无法将其更改为+ viewDidLoad.我可以将foobar移到一个类方法中,但那我该怎么称呼呢?而不是自我,我指的是[ViewController ...]?我觉得这不行.

我的猜测是我错过了一些基本的概念,并不像我正在做的那样困难.我感激任何能够理顺我的人.

非常感谢.

Joh*_*eek 5

没有一个正确的答案; 它取决于您的自定义对象如何与控制器交互.大多数UIKit视图使用"目标 - 动作"模式与控制器进行通信,而许多模型对象使用委托模式.您使用哪一个取决于您的控制器和您的自定义对象的细节.

但是,机械地,您可能需要做的是在通过自定义初始化程序ViewController创建时传入指针customObj,如下所示:

customObj *customObjInstance = [[customObj alloc] initWithController: self];
Run Code Online (Sandbox Code Playgroud)

customObj如果你这样做,请确保你与控制器紧密耦合是有意义的.