在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist”
项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plist”
项目中还有一个InfoPlist.strings的文件,跟Info.plist文件的本地化相关
Localiztion native development region(CFBundleDevelopmentRegion)-本地化相关
Bundle display name(CFBundleDisplayName)-程序安装后显示的名称,限制在10-12个字符,如果超出,将被显示缩写名称
Icon file(CFBundleIconFile)-app图标名称,一般为Icon.png
Bundle version(CFBundleVersion)-应用程序的版本号,每次往App Store上发布一个新版本时,需要增加这个版本号
Main storyboard file base name(NSMainStoryboardFile)-主storyboard文件的名称
Bundle identifier(CFBundleIdentifier)-项目的唯一标识,部署到真机时用到
#ifdef DEBUG
#define Log(...) NSLog(__VA_ARGS__)
#else #define Log(...) /* */
#endif
@property(nonatomic) NSInteger applicationIconBadgeNumber;
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
- (UIStatusBarStyle)preferredStatusBarStyle;
- (BOOL)prefersStatusBarHidden;
- (BOOL)openURL:(NSURL*)url;
UIApplication *app = [UIApplication sharedApplication]; [app openURL:[NSURL URLWithString:@"tel://10086"]];
[app openURL:[NSURL URLWithString:@"sms://10086"]];
[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
应用程序的生命周期事件(如程序启动和关闭)
系统事件(如来电)
内存警告 … …
argc、argv:直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)
程序正常退出时UIApplicationMain函数才返回
添加UIView到UIWindow中两种常见方式:
- (void)addSubview:(UIView *)view; 直接将view添加到UIWindow中,但并不会理会view对应的UIViewController
@property(nonatomic,retain) UIViewController *rootViewController;
自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的生命周期
常用方法
- (void)makeKeyWindow;
让当前UIWindow变成keyWindow(主窗口)
- (void)makeKeyAndVisible;
让当前UIWindow变成keyWindow,并显示出来