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不分配内存,则再次调用它是可以的。但这是一个坏习惯,应该避免。