在viewDidLoad()之前调用了什么方法但是在main之后?

时间:2011-08-26 13:25:45

标签: objective-c ios

我发现在viewDidLoad()之前调用了didFinishLaunchingWithOptions(),我正在寻找一些可以放置一些必须在viewDidLoad()之前调用的初始化代码的东西。

有这样的地方吗?

此外,可以从其他地方调用viewDidLoad()。应该没问题,还是风险太大?

5 个答案:

答案 0 :(得分:4)

你错了。

将NSLog直接放在方法标题下,您将看到ViewDidLoad直接调用。

[self.window addSubview:self.yourViewController.view];

所以,你要么使用viewDidLoad,要么使用它并不是很漂亮。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

甚至在ViewDidload

之前调用它

答案 1 :(得分:1)

 - loadView()

viewDidLoad()之前开始,并提出建议,在此之后永远不会被直接调用。 这是苹果文档的link

答案 2 :(得分:0)

当我使用MainWindow.xib文件添加我想要添加到窗口的视图控制器时,我遇到了类似的问题。

为了解决这个问题,我在app delegate的didFinishLaunchingWithOptions:方法中分配了窗口的rootViewController(你也可以调用addSubView,但是更好地分配rootViewController)。一旦你这样做,你可以很容易地把你想要的任何逻辑放在前面或后面的地方。它使您可以完全控制视图控制器加载的时间。相反,当通过笔尖加载视图控制器时,很难在它前面执行代码(如果可能的话)。我知道你在应用程序的plist中指定了主xib,但我不知道在加载nib之前是否有办法运行代码。

通常我会避免在xib中添加视图控制器。

我的代码看起来更像:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   // special pre load logic here...

   UIViewController *myVC = [[MyAwesomeViewController alloc] init];
   self.window.rootViewController = myVC;
   [myVC release];

   // special post load logic here...

   [self.window makeKeyAndVisible];
   return YES;
}

答案 3 :(得分:0)

您可以在viewDidLoad中进行应用程序初始化,但是由于尚未设置边界或大小,因此此处不做任何设置。

在viewDidLayoutSubviews(在viewDidLoad之后调用)中进行操作。

我找到了这篇文章,这对我非常有帮助:

The UIViewController lifecycle

答案 4 :(得分:-2)

您可以将初始化代码放在类的init方法中。

可以从其他地方再次致电viewDidLoad。它就像任何其他方法一样。

修改

可以调用viewDidLoad - 但是你应该小心内存管理。如果您在viewDidLoad中分配对象,再次调用它将导致泄漏。因此,由于viewDidLoad的典型功能,您可能希望将代码拉出到您将重复调用并从viewDidLoad调用的另一种方法。