首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >UnitTests和iOS : viewDidLoad触发两次

UnitTests和iOS : viewDidLoad触发两次
EN

Stack Overflow用户
提问于 2013-06-12 17:09:36
回答 5查看 2.4K关注 0票数 1

我正在我的一台UIViewController上测试viewDidLoad事件。

代码语言:javascript
运行
AI代码解释
复制
- (void)testMyView
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    MyViewController *vc = [storyboard instantiateViewControllerWithIdentifier:MYID];
    [vc viewDidLoad];

    STAssertNotNil(vc, @"MyViewController should not be nil");
}

如果我删除行[vc viewDidLoad];viewDidLoad永远不会被触发。

如果我让[vc viewDidLoad];就位,viewDidLoad会被触发两次。

我知道视图是延迟加载的,但是我如何避免这种行为呢?

有没有关于视图测试的最佳实践?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-12 17:12:41

您需要访问视图才能使其自动加载。

你可以使用这样的东西来做它,而不会有副作用:

代码语言:javascript
运行
AI代码解释
复制
vc.view.hidden = NO; // Or YES if it is supposed to be hidden.

哦,然后删除您对viewDidLoad的手动调用,因为它将不再需要。

票数 11
EN

Stack Overflow用户

发布于 2017-06-07 11:59:22

阅读我的笔记https://github.com/onmyway133/blog/issues/52

假设我们有以下视图控制器

代码语言:javascript
运行
AI代码解释
复制
class ListController: UIViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white
  }
}

了解viewDidLoad

我们知道在第一次创建视图时会调用viewDidLoad。因此,在单元测试中,如果使用viewDidLoad触发,就会落入陷阱

代码语言:javascript
运行
AI代码解释
复制
func testSetup() {
  let controller = ListController()
  controller.viewDidLoad()
}

为什么viewDidLoad会被调用两次?

它在您的测试中被调用一次,在您的viewDidLoad方法中,您访问第一次创建的视图,因此它将再次触发viewDidLoad

正确的方式

最佳实践不是自己触发事件,而是做一些事情来使事件发生。在单元测试中,我们只是访问视图来触发viewDidLoad

代码语言:javascript
运行
AI代码解释
复制
func testSetup() {
  let controller = ListController()
  let _ = controller.view
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-29 16:25:17

使用vc view进行延迟加载;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17071329

复制
相关文章
Android OpenGL ES 纹理
之前我们一直都是在绘制简单的图形与颜色,如果是一张图片该如何通过OpenGL ES进行渲染出来呢?
Rouse
2023/02/14
1.2K0
Android OpenGL ES 纹理
OpenGL ES(三) 纹理
纹理是一种应用到OpenGL绘图场景中三角形上的图像数据,它通过经过过滤纹理单元填充到实心区域。 下面是OpenGL ES载入一个简单纹理的例子 -(void)setupGL{ // 创建设备上下文,用OpenGL ES 2.0的API GLKView *view = (GLKView *)self.view; view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; // GLKView
用户2215591
2018/06/29
5900
OpenGL ES 绘制纹理
在OpenGL ES中绘制一张图片需要使用到纹理(texture),绘制纹理步骤如下:
老孟Flutter
2020/09/11
1.1K0
OpenGL ES 2.0 (iOS)[06-1]:基础纹理
Texture 在 OpenGL 里面有很多种类,但在 ES 版本中就两种——Texture_2D + Texture_CubeMap;
半纸渊
2018/08/30
2.1K0
OpenGL ES 2.0 (iOS)[06-1]:基础纹理
OpenGL ES _ 着色器_纹理图像
玩过游戏的同学们,都知道在游戏人物身上穿的那个叫皮肤,专业点将那个就叫做纹理图像。GLSL 支持在顶点和片段着色器使用纹理图像。
酷走天涯
2018/09/14
1.3K0
(转载非原创)OpenGL ES 压缩纹理
在实际应用特别是游戏中纹理占用了相当大的包体积,而且GPU无法直接解码目前流行的图片格式,图片必须转换为RGB等类型的格式才能上传到GPU内存,这显然增加了GPU内存的占用。为了处理这些问题于是出现了GPU支持的压缩纹理格式,在GPU中进行解码。压缩纹理属于有损压缩,更在意解码速度,而编码在程序运行之前,因此速度较慢。
xlj
2021/07/07
1.3K0
OpenGL ES 纹理过滤模式-glTexParameteri
Android中GLES20.glTexParameteri函数表示对纹理的设置,函数结构如下:
老孟Flutter
2020/09/11
1.4K0
OpenGL ES实践教程(五)多重纹理实现图像混合
教程 OpenGL ES实践教程1-Demo01-AVPlayer OpenGL ES实践教程2-Demo02-摄像头采集数据和渲染 OpenGL ES实践教程3-Demo03-Mirror OpenGL ES实践教程4-Demo04-VR全景视频播放 其他教程请移步OpenGL ES文集。 有简书的开发者问我如何使用在一张大图上贴一张小图,原始的需求是在检测人脸,在返回的范围(矩形)内贴上一张图片。 有几点前提: 尽量少消耗CPU; 合成的数据是用于推流; 图片大小不一致; 说说如果没有上述几点
落影
2018/04/27
3.4K0
OpenGL ES实践教程(五)多重纹理实现图像混合
opengl入门-纹理
到这一讲稍微复杂点了,做个阶段性的总结,加深记忆 参考:learnOpenG-纹理 opengl工作流理解: opengl实现渲染的套路有一定范式,把握两条主线: ope
公号sumsmile
2020/06/09
9350
NeNe opengl 纹理映射
#include "stdafx.h" #include <windows.h> // Windows的头文件 #include<stdio.h> //#include <gl/glew.h> // 包含最新的gl.h,glu.h库 //#include <gl/glut.h> // 包含OpenGL实用库 #include <gl/glaux.h> // GLaux库的头文件 //#include<gl/GLU.h> #pragma comment(lib, "open
流川疯
2019/01/17
7840
OpenGL 学习系列 --- 纹理
要注意到,OpenGL 绘制的物体是 3D 的,而纹理是 2D 的,那么纹理映射就是将 2D 的纹理映射到 3D 的物体上,可以想象成用一张纸裹着一个物体一样,不过要按照一定规律来。
音视频开发进阶
2019/07/25
1.5K0
OpenGL ES 如何一次性渲染到多个纹理?
OpenGL ES 多目标渲染(MRT),即多重渲染目标,是 OpenGL ES 3.0 新特性,它允许应用程序一次渲染到多个缓冲区。
字节流动
2022/02/09
3.1K0
OpenGL ES 如何一次性渲染到多个纹理?
在Cookie中存储对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/46955119
DannyHoo
2018/09/13
3.9K0
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
OpenGL(八)--纹理相关API 1. 原始图像数据 //存储图像数据所占内存大小 size = 图像的高度 * 图像的宽度 * 每个像素所占字节数 像素所占字节数:一般为4Byte,包含RGBA四个通道,每个通道为1Byte(8Bit) 2. 认识函数 像素存储方式 //改变像素存储方式 void glPixelStorei(GLenum pname,GLint param); //恢复像素存储方式 void glPixelStoref(GLenum pname,GLint param); /
用户8893176
2021/08/09
1.3K0
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
OpenGL与OpenGL在移动端的应用
OpenGL首先我们从字面意思来理解:Open Graphics Library,开放的图形库,图形库自然是处理图形的,所以简单来说OpenGL就是用来处理图形的一个三方库。 稍微技术流一点,作如下解释:是用于渲染2D,3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
清墨
2019/11/15
2.8K0
OpenGL与OpenGL在移动端的应用
纹理分析及其在医学成像中的应用
纹理分析是一种量化图像强度变化的图像分析技术。的基本原理,以及它们的优点、缺点和应用。这项研究的重点是收集和分析近50年来有关纹理分析的研究,简要描述了不同的方法,并给出了应用实例。鉴于纹理分析应用广泛,本研究主要集中在生物医学图像分析领域,并整理了一份最新的生物组织和器官相关的疾病产生的纹理变化的列表,可用于查阅疾病的发病和进展。最后,总结了纹理分析方法作为疾病生物标记物的作用。本文发表在IEEE REVIEWS IN BIOMEDICAL ENGINEERING杂志。
用户1279583
2022/02/28
1.1K0
纹理分析及其在医学成像中的应用
在 Flutter 中创建可拖动的浮动操作按钮[Flutter专题15]
Flutter 允许您使用FloatingActionButton小部件添加浮动操作按钮。但是,它不允许您拖动按钮。如果你想让它可拖动怎么办。本教程有一个示例,说明您需要做什么才能创建浮动操作按钮,只要它位于父小部件内,就可以将其拖动到屏幕周围的任何位置。
徐建国
2021/12/07
5.9K0
在 Flutter 中创建可拖动的浮动操作按钮[Flutter专题15]
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.3K0
在 macOS 下配置 OpenGL
下载 glad,macOS 据说只支持 3.3,所以我选择了 gl: 3.3 和 Profile: Core。 解压后将 glad 文件夹直接放入 /usr/local/Cellar 文件夹下。
云游君
2021/05/21
6860
点击加载更多

相似问题

在OpenGL ES中将纹理渲染到自身

12

OpenGL (ES)如何存储纹理/顶点

20

OpenGL ES纹理存储器

112

在opengl es 2.0中绘制纹理

38

OpenGL/OpenGL ES更新纹理

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档