【问题标题】:Whats the best place to set a View Controller ivar?设置 View Controller ivar 的最佳位置是什么?
【发布时间】:2009-06-17 00:34:06
【问题描述】:

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

- (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 函数中的类。

【问题讨论】:

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


    【解决方案1】:

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

    只要您不假设 viewController 属性的值随着时间的推移保持不变,就可以保持原样。

    顺便说一句,您可能会考虑将 addObject: 逻辑重构为协议,而不是需要特定的子类。比如:

    -xmlController:didDecodeObject:
    

    或者任何对你的 XMLController 对象的逻辑有意义的东西。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2013-01-08
        • 1970-01-01
        • 2015-11-23
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多