首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UIWindow使用纯代码加载根控制器2. UIWindow的创建过程3. 四大对象之间的关系

UIWindow/使用纯代码加载根控制器 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow -iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的...UIViewController *mainController = [[UIViewController alloc] init]; // 给窗口指定根视图控制器 window.rootViewController...= mainController; // 让当前窗口成为主窗口并显示 [window makeKeyAndVisible]; return YES; } 到这里还不会显示的原因是因为作用域...主窗口同一刻只能有一个UIWindow *keyW = application.keyWindows; 1.2 对window进行操作 // 让当前UIWindow变成keyWindow,并显示出来...application 根据项目配置文件info.plist里面的storyboard的name,找到对应的storyboard 接下来创建一个window 之后创建它的初始化控制器(就是箭头所指向的控制器

1.7K30

IOS开发系列——UIView专题之一:UIWindow篇

iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。...补充:UIWindow是创建的第一个视图控件(创建的第一个对象是UIapplication)如下图: 添加 先创建UIwindow,再创建控制器,创建控制器的view,然后将控制器的view添加到UIWindow... addsubview:vc.view]; (2)设置uiwindow的根控制器,自动将rootviewcontroller的view添加到window中,负责管理rootviewcontroller...的生命周期 [self.window.rootviewcontroller=vc]; 两个方法的区别: 以后的开发中,建议使用(2).因为方法(1)存在一些问题,比如说控制器上面可能由按钮,需要监听按钮的点击事件...(3)view.window获得某个UIView所在的UIWindow。

76730
您找到你想要的搜索结果了吗?
是的
没有找到

UIViewController生命周期

一、视图控制器 UIViewController采用懒加载的方式,也就是说第一次访问到view属性才会加载或创建它。...由于视图视图控制器管理,所以讨论视图的加载方式,主要讨论视图控制器的加载方式。 通过Storyboard加载:这是苹果推荐的方式。...7、ViewWillDisAppear 视图即将消失 8、ViewDidDisAppear 视图已经消失 9、ViewWillUnload(已废弃) 当内存过低,需要释放一些不需要使用视图,即将释放时调用...系统会自动把程序变成这个状态而且不会发出通知。当挂起,程序还是停留在内存中的,当系统内存低,系统就把挂起的程序清除掉,为前台程序提供更多的内存。...view添加到UIWindow中,并不理会它对应的控制器 [self.window addsubview:vc.view]; (2)设置uiwindow的根控制器,自动将rootviewcontroller

1.8K10

iOS第三方类库IIViewDeck使用方法

项目中根据需求用到了一个界面框架:ViewDeck。...项目需要用到左侧右侧各有一个抽屉视图,而这个类库可以极其简单的实现这个功能,不单单是左右各一个,它可以随意设置上下左右的抽屉视图,简直是360度想怎么抽怎么抽,这里记录一下使用方法。...ViewDeck只是一个框架,具体的界面当然还是自己自定义的,因此这里先自定义三个视图控制器用来放在中间、左边和右边的视图中,然后就可以用这三个视图来初始化ViewDeck并将其作为根视图: //.h文件...对ViewDeck控制器设置一个值就可以了: //设置当滑动到左右边,中间视图对点击的响应 //1.默认设置,点击中间界面不会返回中间界面,中间界面控件有响应 // self.deckController.centerhiddenInteractivity...好像还漏了一个事情,从上面的图可以看出,左边和右边视图出现时占据屏幕的宽度是不一样的,在实际的项目中,往往也是根据需要占据不同的宽度,那么怎么设置呢?

62020

iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

注意点:rootViewController属性 目前只有UIWindow有rootViewController这个属性,不要跟UINavigationController里面的根视图概念混淆。...#pragma mark - 获取根视图的(导航、标签)视图控制器 + (UINavigationController *)getRootVCformViewController { UIViewController...如果不想影响原来的UIWindow,可以考虑新建一个UIWindow并覆盖原来的UIWindow,并往新建的UIWindow上添加各种手势相关的视图控制器。...指定自定义视图控制器 UIViewController *vc = [[UIViewController alloc]init]; _window.rootViewController = vc; 3....其实,如果我们在编写代码严谨地保证keyWindow是显示在最上层的UIWindow,这样写没有问题。

7.7K10

打造自己的内存泄漏检测工具

PLeakSniffer 使用 Ping-Pong 方式监测对象是否存活,在进入页面,创建控制器关联的一系列对象代理,根据这些代理在控制器销毁能否响应 Ping 判断代理对应的对象是否泄漏。...MLeaksFinder 则是在控制器销毁,延迟 3s 后再向监测对象发送消息,根据监测对象能否响应消息判断其是否泄漏。...系统类过滤不全面 • 处理对象持有属性,通过 KVC 访问属性导致一些懒加载的触发 • 无法处理未添加到视图栈中的泄漏视图 • 检测结果输出分散 对于检测到泄漏对象的交互处理,两者都提供了终端 log...局限性 基于延时的内存泄漏监测机制虽然适用于大部分视图控制器和一般属性的泄漏场景,但是还有少部分情况,这种机制无法处理,比如单例对象和共享对象。...因为每次 pop 都使用 FBRetainCycleDetector 检测控制器会比较耗时、甚至会造成延迟释放和卡顿,所以先用延时机制找出潜在的泄漏对象,再使用 FBRetainCycleDetector

99630

OpenGL ES编程指南(三)

当您的应用程序位于后台,它对用户不可见,并且可能不会使用OpenGL ES呈现任何新内容。这意味着您的应用程序的帧缓冲区所消耗的内存已分配,但无用。...如果您使用GLKit视图视图控制器,则当您的应用移动到后台,GLKViewController类会自动处理其关联视图的帧缓冲区。如果您为其他用途手动创建帧缓冲区,则应该在应用移动到背景将其丢弃。...默认情况下,GLKViewController和GLKView类会自动处理方向更改:当用户将设备旋转到支持的方向,系统会激活方向更改更改视图控制器视图的大小。...如果您使用Core Animation图层绘制OpenGL ES内容,则应用程序仍应包含视图控制器来管理用户界面方向。 其他显示屏上展示 iOS设备可以连接到外部显示器。...为您的渲染策略添加适当的视图视图控制器对象。

1.8K10

Swift封装-滑出式导航栏

效果图.gif 前言: 本文将会创建以下几个主类: DWContainerViewController:这包含了左视图,中视图和右视图控制器视图,并处理动画和滑动等操作。...var leftViewController: DWSidePanelViewControllervar centerPanelExpandedOffset: CGFloat = 60 //该值是中央视图控制器在屏幕外动画显示后左侧可见的宽度...= UINavigationController(rootViewController: centerViewController) //加入centerViewcontroller的视图 view.addSubview...(centerNavigationController.view) //加入centerViewcontroller的视图控制器 addChildViewController(centerNavigationController...false,才会执行之后代码块里的代码,如果为true,则跳过整个guard语句 guard leftViewController == nil else { return }

2.3K80

解释SQL查询计划(一)

根据对表定义所做的更改,确定是否对对该表执行SQL操作的例程进行代码更改。 注意:SQL语句是一个SQL例程列表,它们可能会受到表定义更改的影响。 它不应该用作表定义或表数据更改的历史记录。...嵌入式SQL基于指针的SELECT命令在OPEN命令调用声明的查询创建SQL语句。管理门户缓存查询列表中不会创建单独的条目。...它也不会更改源表的SQL语句的Plan Timestamp。 然而,为视图编译DML命令会为该视图创建一个SQL语句。...删除查询使用的表,该表被标记“Deleted??”;Clean Stale不会删除SQL语句。...在Task Details(任务详细信息)显示中,可以使用Run(运行)按钮强制立即执行任务。请注意,这些操作不会更改SQL语句清单;必须使用Clean Stale来更新SQL语句清单。

2.9K20

iOS-UIWindow详解

iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口root viewcontroller...因此,当系统加载完info.plist,判断后发现没有main,就不会加载storyboard,也就不会帮我们创建UIWindow,那么我们需要自己在程序启动完成的时候也就是在didFinishLaunchingWithOptions...首先根据系统加载storyboard做的三件事情,我们可以总结出UIWindow创建步骤 创建窗口对象 创建窗口的根控制器,并且赋值 显示窗口 并且我们在AppDelegate.h中发现属性window...3.通过storyboard加载控制器 刚才我们提到过系统在加载storyboard的时候会做以下三件事情 创建窗口 加载mian.storyboard 并实例化view controller 分配新视图控制器到窗口

1.9K40

iOS多控制器之UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单 当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view,可以用一个大的view去管理1个或者多个小view..., 可以通过initWithRootViewController:方法传入一个控制器作为根控制器 这个根控制器永远处于栈底(如果栈中只有一个对象,那么根控制器也处于栈顶) 设置UIWindow的rootViewController...为UINavigationController 根据具体情况,通过push方法添加对应个数的子控制器 2.2 代码创建 初始化UINavigationController - (BOOL)application...return YES; } 2.3 给nav添加子控制器的三种方法 1,initWithRootViewController:创建导航控制器,直接指定一个根控制器。...:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示的顺序和添加的顺序一致,和导航控制器中不同,展现在眼前的是导航控制器的根视图控制器也就是第一个添加到导航控制器上的视图

1.2K40

iOS13 Scene Delegate

在上面的代码中,我们可以手动地设置了视图控制器堆栈,稍后会进行详细介绍。...而application(_: didDiscardSceneSessions:)发生在使用应用程序切退出场景。...在保留Application Scene Manifest配置项不予删除(其中,项目是否支持多窗口功能是个可勾选项),AppDelegate的生命周期方法不再起作用,需要在SceneDelegate中使用...接着为SwiftUI项目创建了ContentView实例,并通过使用UIHostingController将其添加为根视图控制器。 该控制器用于将基于SwiftUI的视图显示在屏幕上。...scene(_: willConnectTo: options: )函数内,创建一个SwiftUI视图,将其放置在托管控制器中,然后将控制器分配给window属性的根视图控制器,并将该窗口放置在应用程序

5.2K20

2017年系统架构师软考案例分析考点

控制器、模型 3.1 视图(View):视图是用户看到并与之交互的界面。...视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。 3.2 控制器(Controller):控制器接受用户的输入并调用模型和视图去完成用户的需求。...数据库程序在线访问方式优点: 1、性能比 ORM 好 2、可以处理复杂查询语句 数据库程序在线访问方式缺点: 1、要求程序员懂 SQL 语句 2、修改与维护相对困难 ORM 优点: 1、使用 ORM 可以大大降低学习和开发成本...其优点是可以非常方便的创建一系列的对象,其使用场景也是创建系列对象的情况。...2、可扩展性更优 如果采用单台数据库服务器,则访问量持续增加,数据库瓶颈暴露,且无法迅速解决问题。而主从结构可以快速增加从服务器数量,以满足需求。

83420

iOS开发--UIWindow与程序启动原理与两种创建控制器的方法

Paste_Image.png UIWindow UIWindow是一种特殊的View 1.iOS启动完毕后,创建的第一个视图控件就是UIWindow。...Paste_Image.png // instantiateInitialViewController:加载箭头指向的控制器 ? Paste_Image.png 3.根据标识来加载: ?...`s Owner 更改它的描述类型是控制器 ?...Paste_Image.png 总结: loadView作用:自定义控制器的view loadView什么时候调用:第一次使用控制器的view的时候调用 注意:在这个方法中如果没有自定义view,就不能获取控制器的...Paste_Image.png 因为你要使用它,所以这一行就会加载 ? Paste_Image.png 虽然下面设置了控制器的颜色,但是上面的设置颜色阶段就已经显示了控制器 ?

1.1K20

基础篇-UIApplication、UIWindow以及程序的启动流程看我就够了

iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的View,最后将控制器的View添加到UIWindow上,于是控制器的View就显示在屏幕上了。...// 加载箭头指向的控制器 UIViewController *vc = [stroyboard instantiateInitialViewController]; //根据绑定标识加载...分配新视图控制器到窗口root viewcontroller,然后使窗口显在示屏幕上。...(假如没有storyboard)就不会加载storyboard,也就不会帮我们创建UIWindow,那么我们需要自己在程序启动完成的时候也就是在didFinishLaunchingWithOptions...分配新视图控制器到窗口root viewcontroller,然后使窗口显在示屏幕上。 四大对象关系图和程序启动流程图 ? ?

1.5K20

在Swift中使用工厂进行依赖注入

然而,我们的列表视图很可能不是只有一层,这在某种程度上需要我们实现导航到另一个视图控制器。 假设我们想让用户在点击消息列表中的某个单元格,能够导航到一个新的视图。...为了启用回复功能,我们实现了一个MessageSender类,在创建新的视图控制器,我们将其注入到新的视图控制器中,像这样: override func tableView(_ tableView:...我们还将创建额外的工厂协议来创建我们的视图控制器的依赖关系,比如这个,让我们为我们的列表视图控制器创建一个MessageLoader: protocol MessageLoaderFactory {...class MessageListViewController: UITableViewController { // 这里我们使用协议组合来创建一个工厂类型, // 其中包括这个视图控制器需要的所有工厂协议...= UINavigationController( rootViewController: listViewController ) 不需要在任何地方保留任何全局变量,也不需要在应用程序委托中使用可选属性

80920

iOS 本地推送概念步骤:属性:点击通知跳到指定控制器界面快捷回复功能(iOS 8以后可用), category 属性的使用方法

如果程序正在前台执行,那么推送通知就不会被呈现出来,但是微信在前台的时候也能推送消息,方法是:创建一个view,仿造系统消息通知的样式向下出现,点击后回到根控制器再进行跳转(注意压栈) 点击通知会打开该通知的...@property(nullable, nonatomic,copy) NSDictionary *userInfo; 例子: 发送通知,带一个索引2的参数,点击通知打开程序后自动跳到第三个控制器(...,枚举值: UIApplicationStateActive, 激活 UIApplicationStateInactive, 将要激活 UIApplicationStateBackground...TabBarController UITabBarController *rootController = (UITabBarController *)self.window.rootViewController..., category 属性的使用方法 如QQ的功能:触发通知后,点击下拉出现,点击“好的”两个字当做消息回复回去 ?

2.5K60
领券