Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在viewDidLoad()之前调用的是什么方法,而在main之后调用的是什么方法?_Objective C_Ios - Fatal编程技术网

Objective c 在viewDidLoad()之前调用的是什么方法,而在main之后调用的是什么方法?

Objective c 在viewDidLoad()之前调用的是什么方法,而在main之后调用的是什么方法?,objective-c,ios,Objective C,Ios,我注意到viewdiload()在didfishlaunchwithoptions()之前被调用,我正在寻找一些可以在viewdiload()之前调用的初始化代码 有这样的地方吗 此外,可以从其他位置调用viewDidLoad()。它应该是正常的,还是太危险了?您可以将初始化代码放在类的init方法中 可以从其他地方再次调用viewDidLoad。这和其他方法一样 编辑: 可以调用viewDidLoad——但是在内存管理方面应该小心。如果在viewDidLoad中分配对象,再次调用它将导致泄漏。

我注意到
viewdiload()
didfishlaunchwithoptions()
之前被调用,我正在寻找一些可以在
viewdiload()之前调用的初始化代码

有这样的地方吗


此外,可以从其他位置调用viewDidLoad()。它应该是正常的,还是太危险了?

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

可以从其他地方再次调用
viewDidLoad
。这和其他方法一样

编辑:

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

调用。您错了

将NSLog直接放在方法头下面,您将看到ViewDidLoad在方法头之后被直接调用

[self.window addSubview:self.yourViewController.view];
因此,您可以使用viewDidLoad,也可以选择使用不太漂亮的

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

甚至在ViewDidload之前就调用了这个函数。有一次,当我使用MainWindow.xib文件将想要添加的视图控制器添加到窗口时,我遇到了一个类似的问题

为了解决这个问题,我在app委托的didfishlaunchingwithoptions:方法中分配了窗口的rootViewController(您也可以调用addSubView,但分配rootViewController更好)。一旦你做到这一点,你可以很容易地把任何逻辑,你想在前面或后面发生这种情况。它使您完全控制视图控制器的加载时间。相反,当视图控制器通过nib加载时,很难在它前面执行代码(如果可能的话)。我知道你在应用程序的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;
}

 - loadView()
viewDidLoad()
之前启动,并提供了一条建议,在这之后不要直接调用。
以下是苹果文档的链接。

您可以在viewDidLoad中进行应用程序初始化,但不要在此处进行任何边界或大小设置,因为它们尚未设置

在ViewDidLayoutSubView中执行这些操作,该子视图在viewDidLoad之后调用

我发现这篇文章对我很有帮助:


应避免手动调用viewDidLoad,因为它是视图生命周期的一部分。通常,其他视图元素的初始化应在viewDidLoad内完成。手动调用viewDidLoad在最坏的情况下会泄漏内存,在最好的情况下会导致执行不必要的Alloc。相反,不管你想触发什么逻辑,把它放在另一个可以安全多次调用的方法中,然后从viewDidLoad调用它。我不同意。内存管理是一个单独的问题,您关于不必要的分配和泄漏的观点是正确的。但是,如果viewDidLoad不分配内存,则再次调用它是可以的。但这是一个坏习惯,应该避免。