我正在使用Objective-C编写iPhone应用程序。我创建了一个类(Foo.m),我希望能够在控制器中调用一个方法(MainViewController.m)来实例化它。我该怎么做呢?请举个例子。谢谢!
答案 0 :(得分:0)
您可以这样做的一种方法是在Foo类中创建一个引用其创建者的属性。您不应保留此引用以避免循环引用,但代码可能如下所示
-(void)yourControllerClassMethod{
Foo* f = [[Foo alloc] init];
[f setOwnder:self];
}
在这种情况下,您的Foo类有一个名为owner的属性,该属性在Controller类创建新的Foo实例时设置。现在从您的Foo类中,您可以调用这样的控制器方法:
[[self owner] callSomeControllerMethod];
答案 1 :(得分:0)
首先,我建议阅读一些设计模式书籍。如果您的Foo
类是模型,那么为什么您的模型会与Controller通信?如果Foo
是一个视图,那为什么它会与您的控制器通信?
现在,虽然我怀疑您的应用程序在构建代码时存在设计问题,但仍有办法实现此目的。
当MainViewController.m实例化Foo时,你能否传入self
并让Foo保留对它的引用?
或者,你应该在Foo中创建一个@protocol
,当MainViewController创建Foo时,让MainViewController实现Foo的delegate
。
答案 2 :(得分:0)
你应该查看Erik M. Buck和Donald A. Yacktman的Cocoa Design Patterns。这是一本非常出色的书,即使你不熟悉一般的设计模式,也很容易理解。
听起来你想要做的就是其他人说的是一种叫做代表团的模式。要查看委派如何工作,请查看使用它的所有内置类。任何具有delegate
属性和类似UIBlablaDelegate
的协议的东西都在使用委托,你可以对你的类做同样的事情。