我有一个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函数中下载和解析类。
答案 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];