我如何分配和初始化一个对象,所以当ViewDidLoad加载时它不应该重新加载?

时间:2011-02-07 08:28:06

标签: iphone objective-c init viewdidload alloc

我已经在我的 ViewController ViewDidLoad中初始化了一个委托对象,但是当我再次加载它时,它再次初始化该值。

我在该委托对象中保存了某种类型的数组,我希望使用getObjectsetObject来访问该对象。 我应该怎么做,以便每次调用ViewDidLoad时都不会重新初始化委托对象?

4 个答案:

答案 0 :(得分:1)

你有没有考虑过这个策略:

  • 启动应用程序后,在初始化和使用该特定对象之前,将其设置为nil。
  • 您的应用首次尝试使用它,检查它是否仍为零(应该是第一次),然后初始化并使用它
  • 对于应用程序生命周期的剩余时间,只要您的应用程序再次运行到viewDidLoad方法,请始终检查该对象是否为零(此时它不应为零)。这样可以节省您的应用程序尝试初始化已初始化的对象的时间和精力。

但是,当您使用此策略时,您应该知道特定对象的值应该在整个应用程序的生命周期中保持不变。否则它将无法工作。

答案 1 :(得分:0)

您应该只在viewDidLoad中初始化UI元素。其他所有内容都应该在构造函数中(initWith ...)

答案 2 :(得分:0)

如果你想某个地方只做一次事情,那通常是在某个地方的一个单身人士 - 一个被制作一次的对象,并从全身引用。

AppDelegate是您免费获得的默认单身人士。但是如果你在AppDelegate中经过一段时间的决定,那么制作不同的Singleton对象是一个好主意。

有很多例子都展示了如何制作单身人士,现在你知道你正在寻找的术语。

答案 3 :(得分:0)

正如其他人所说,你可能需要一个单身对象。最简单的方法是:

// interface

@interface MyViewController
{ ... }

+(DelegateType*) theDelegate;

...

@end

// implementation

@implementation MyViewController

+(DelegateType*) theDelegate
{
    static DelegateType* theDelegate = nil;

    if (theDelegate == nil)
    {
        theDelegate = [[DelegateType alloc] init];
    }
    return theDelegate;
}

@end

// To use it 

    [foo setDelegate: [MyViewController theDelegate]];