- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
出于实验目的,我正在尝试一些完全在代码中的东西。
我有一个自定义根 UIView
/UIViewController
子类对,分别称为 RootView 和 RootViewController。
我还有一个名为 RenderView 和 RenderViewController 的 GLKView
/GLKViewController
子类对。
两个 UIViewController
子类都在它们的 loadView
覆盖中创建它们的托管 View 。
设置主 RootViewController/RootView 很简单。在我的 AppDelegate 子类中,我创建了主窗口并像这样分配 rootViewController proeprty ...
#import "AppDelegate.h"
#import "RootViewController.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CGRect screenBounds = [[UIScreen mainScreen] bounds];
// Set up the window
UIWindow* mainWindow = [[UIWindow alloc] initWithFrame:screenBounds];
mainWindow.rootViewController = [RootViewController new];
self.window = mainWindow;
[mainWindow makeKeyAndVisible];
return YES;
}
@end
RootView 完全按照预期出现在屏幕上。
然而,我想知道的是关于 View 层次结构的初始化。 RootViewController 有一个属性来保存 RenderViewController 的实例,并且它的 RenderView 将(最初)放置在框架中,该框架存储在 RootViewController 的第二个属性中,称为 renderViewFrame。
我的问题是设置该层次结构的合适位置在哪里?
文档说明这正是 UIViewController
的 loadView
的用途,所以这就是我在那里所做的...
- (void)loadView
{
self.view = [[RootView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Set up the RenderViewController
RenderViewController* renderViewController = [RenderViewController new];
[self addChildViewController:renderViewController];
renderViewController.view.frame = self.renderViewFrame;
[self.view addSubview:renderViewController.view];
self.renderViewController = renderViewController;
}
...它有效,但我看到有些人说不,我应该将与创建 RenderView/RenderViewController 相关的所有内容移动到 RootViewController 的 viewDidLoad
而不是 loadView
,但没有人能说出为什么。我的意思是它是层次结构的一部分,这正是 loadView
的用途。
如果我是对的,那么如果我们已经在 loadView
中进行初始化,那么我/任何人为什么还需要使用 viewDidLoad
,或者仅仅是当内存可以在 iOS6 中一直卸载 View 时的神器?
最佳答案
Apples 文档实际上说只是在 loadView
上加载 View 而不做任何其他事情,然后
If you want to perform any additional initialization of your views, do so in the viewDidLoad method.
从技术上讲,这两种方法都可以工作,它只是关于分离关注点并将逻辑放在最有意义和预期被发现的地方。
如果该方法是 loadViewHierarchy
则请穿上 Boot 。在 99.9999...% 的所有应用程序中,额外的 View 将被添加(在 NIB 中或)在 viewDidLoad
中。
关于ios - 对于完全以编程方式创建的 UIView/UIViewController,loadView 与 viewDidLoad 中应该包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37579090/
1。 Set 的 parallelStream 没有使用足够的线程。 Java8 parallelStream 不能完全并行工作。在我的计算机中,当任务数小于处理器数时,java8 集的 parall
我想将位置发送到 Google Geocoding API,因此我想用 + 替换文本中的任何空格或逗号(因为可以接收)。 例如,所有这些样本应返回 Glentworth+Ireland: Glentw
所以我需要为将要上传的图像文件生成较小的预览,并且我必须在每个文件名的末尾附加“_preview”。 目前我正在这样做: uploadFile.map((file) => { if (fi
我们可以用参数定义类型同义词,这在与实际类型一起使用时效果很好: type MyType t = t String String data Test a b = Test a b f :: MyTyp
给定一个包含一些 TGraphic 后代的 Delphi TPicture,我需要计算像素颜色和不透明度。我认为我必须为每个类提供不同的实现,并且我认为我已经涵盖了 TPngImage。 32 位位图
我正在调试 Powershell 项目。我正在使用 Import-Module 从我的 C# dll 加载 PS 模块,一切正常。尽管调用 Remove-Module 并不会完全卸载模块,因为 DLL
有没有办法在ElasticSearch中要求完整(尽管不一定精确)匹配? 例如,如果一个字段具有术语"I am a little teapot short and stout",我想匹配" i am
我正在尝试根据日期范围连接两个表。 表A格式为: ID CAT DATE_START DATE_END 1 10 2018-01-01 2020-12-31 2
我最近加入了一家公司,在分析他们的环境时,我注意到 SharePoint web.config 的信任级别设置为“完全”。我知道这绝对是一个糟糕的做法,并且希望 stackoverflow 社区能够帮
我构建了一个完全依赖 AJAX 的 php/js 应用程序,因此没有任何内容是静态的。 我正在尝试找到一种方法来转换基于内容的广告,该广告使用 AJAX 交付的内容作为关键字。 Google 的 Ad
我正在尝试根据日期范围连接两个表。 表A格式为: ID CAT DATE_START DATE_END 1 10 2018-01-01 2020-12-31 2
我熟悉 FileSystemWatcher 类,并使用它进行了测试,或者我使用快速循环进行了测试,并在目录中列出了类型文件的目录列表。在这种特殊情况下,它们是 zip 压缩的 SDF 文件,我需要解压
按照 Disqus 上的教程进行操作时,评论框不会呈现。从 disqus 上找到的管理员看来,它的设置似乎是正确的。 var disqus_config = function () { this
是否可以使用 Cython 将 Python 3 应用程序完全编译/链接为可执行格式(当然假设所有使用的模块都是 cythonable)。 我在 Linux 下工作,我希望获得一个依赖性尽可能小的 E
我有一个 C# 控制台应用程序,而不是运行预构建步骤(以获取 NuGet 包)。 当我调试这个时,我想传入一个参数并显示控制台。当我不调试它时,我不想看到它。我什至不希望它在那里闪烁一秒钟。 我找到了
我在 n 个节点上有一个完整的 19 元树。我标记所有具有以下属性的节点,即它们的所有非根祖先都是最年长或最小的 child (包括根)。我必须为标记节点的数量给出一个渐近界限。 我注意到 第一层有一
我正在阅读一篇关于 Java Volatile 关键字的文章,遇到了一些问题。 click here public class MyClass { private int years;
一本书中写道——“如果问题 A 是 NP-Complete,则存在解决 A 的非确定性多项式时间算法”。但据我所知,"is"——NP 完全问题的答案可以在多项式时间内“验证”。我真的很困惑。能否使用非
考虑以下问题: 有N个硬币,编号为1到N。 你看不到它们,但是给出了关于它们的 M 个事实,形式如下: struct Fact { set positions int num_head
我想制作一个包装数字类型的类型(并提供额外的功能)。 此外,我需要数字和包装器可以隐式转换彼此。 到目前为止我有: template struct Wrapper { T value;
我是一名优秀的程序员,十分优秀!