Vì vậy, như bạn đã đề cập, hàm main()
trong main.m
là điểm bắt đầu, sau đó gọi UIApplicationMain()
. Nếu bạn kiểm tra các tài liệu, bạn sẽ thấy rằng UIApplicationMain
có bốn đối số:
- argc,
- * argv [],
- * principalClassName
- * delegateClassName.
Hai loại đầu tiên trong số đó chỉ là số đối số và danh sách biến được chuyển từ main()
. Nhưng đối số thứ ba và thứ tư là con trỏ tới NSStrings. Đối số thứ ba xác định lớp nào sẽ là UIApplication
. Trừ khi bạn có ý định phân lớp UIApplication
, bạn chỉ định nil
cho đối số thứ ba.Đối số thứ tư xác định lớp nào sẽ là lớp đại biểu của UIApplication, lớp này sẽ trả lời bất kỳ thứ gì được chỉ định trong Giao thức UIApplicationDelegate
. Bạn không cần phải muck với điều này trực tiếp, vì nó bao gồm trong tất cả các mẫu Xcode:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Đừng để các bit NSStringFromClass([AppDelegate class]))
ném bạn. Đó chỉ là một cách ưa thích của việc xác định các đối số thứ tư để các đại biểu phải được gọi là sau này bạn nên thay đổi tên của AppDelegate.m
.
UIApplication
bắt đầu main event loop và gọi -application:didFinishLaunchingWithOptions:
, một trong những phương pháp mà đại biểu của họ phải xử lý. Hãy xem AppDelegate.m
và bạn sẽ tìm thấy một số mã mẫu cho phương pháp này. Đây là nơi bạn có thể bắt đầu tùy biến, tạo ra những thứ mà cần phải được đặt đúng chỗ trước khi UIWindow
và trường hợp khác của UIView
được tạo ra:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
Vì vậy, bây giờ cửa sổ ứng dụng và xem gốc điều khiển được xác định, và các ứng dụng tắt và chạy. hơn
Tất cả điều này, và khá một chút, được xuất sắc giải thích ở đây: http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/
FYI, 'UIApplicationMain()' không bao giờ trở lại. Ứng dụng được chấm dứt thông qua một cuộc gọi đến 'exit()'. Vì vậy, bất cứ điều gì bạn đặt sau khi 'UIApplicationMain (argc, argv, nil, nil);' trong 'main()' sẽ * không bao giờ * được thực thi. Chưa bao giờ. –
Ugh. @ Dave nếu thats đúng, mà thực sự grosses tôi ra. Nó giống như những ngày của BASIC khi chúng ta chỉ đặt STOP ở giữa một GOSUB! –