什么是设置View Controller ivar的最佳位置?

时间:2009-06-17 00:34:06

标签: iphone objective-c cocoa cocoa-touch variables

我有一个XML阅读器类,我用URL初始化

- (id)initWithURL:(NSURL *)url

此类使用实例变量

将对象添加到调用类中的数组
// in the interface
ViewController *viewController;
// in the implementation
[viewController addObject:theObject];

现在,我初始化我的XML阅读器类,然后单独设置视图控制器:

XMLController *xmlController = [[XMLController alloc]
                    initWithURL:url];
xmlController.viewController = self;

我的问题是我是否应该创建一个新的init函数来同时设置viewController。 感谢。

编辑:我忘了添加我的XML阅读器开始在init函数中下载和解析类。

2 个答案:

答案 0 :(得分:4)

这完全取决于你。您可以在Apple的代码中看到这两种样式的示例。

只要您不对viewController属性的值随时间保持不变做任何假设,就可以保持原样。

BTW,您可能会考虑将addObject:logic重构为协议而不是需要特定的子类。类似的东西:

-xmlController:didDecodeObject:

或者对你的XMLController对象的逻辑有意义。

答案 1 :(得分:2)

如果您的init例程将导致委托/控制器调用,或者引发可能向委托发送消息的异步活动(可能包括您的下载),那么您应该将它包含在init函数中。

否则您的控制器可能会错过潜在的委托消息,例如xmlController:didStartConnection,它可能在您的initWithURL例程返回之前被调用。

此外,如果控制器/委托是XMLController活动的必需部分,那么您应该将它包含在init例程中。

所以是的,在这种情况下我会建议:

XMLController *xmlController = [[XMLController alloc] initWithURL:url andController:self];