iOS经验之初始化方法中不该设置self.view的属性浅析
前言
iOS初始化方法包括系统默认的和自定义的,常见系统初始化方法有init, initWithFrame:, initWithNibName:bundle:等,自定义则是各式各样。日常iOS项目开发过程中,我们经常在类的初始化方法中初始化接下来类需要用到的一些必要的数据或界面。
本文主要介绍的是关于iOS初始化方法不设置self.view属性的相关内容,属于 iOS小经验系列:累积平时看起来简单,但容易忽视的小经验,各路大佬敬请回避。
正文:
有个小伙伴新写了一个NextViewController,重新了两个生命周期:
init
- (instancetype)init{ self = [super init]; if (self) { self.modalPresentationStyle = UIModalPresentationCustom; self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; self.edgesForExtendedLayout = UIRectEdgeNone; self.view.alpha = 0; self.view.backgroundColor = [UIColor clearColor]; } return self; }
viewDidLoad
- (void)viewDidLoad { [super viewDidLoad]; //....根据数据源source显示列表数据 }
加载代码
跳转的时候用这样的代码:
- (void)nextButtonClick:(UIButton *)sender { NextViewController *nextVC = [[NextViewController alloc]init]; nextVC.source = [self.source copy]; [self presentViewController:nextVC animated:YES completion:nil]; }
问题描述
结果发现,在执行数据源传值 nextVC.source = [self.source copy];
代码之前,NextViewController的 viewDidLoad 死活要先执行,即使还没执行pushViewController。
问题原因
造成这个问题的原因是在init的方法中设置self.view
相关属性时,会导致viewDidLoad执行,即使前面的页面还没有push过来,即使还没显示。
知识小点
不能混淆和乱用生命周期方法,初始化的方法中不该设置self.view的属性。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
IOS 避免self循环引用的方法的实例详解
IOS 避免self循环引用的方法的实例详解 示例代码: // - weak & strong #define myWeakify(VAR) \ try {} @finally {} \ __weak __typeof__(VAR) VAR##_myWeak_ = (VAR) #define myStrongify(VAR) \ try {} @finally {} \ __strong __typeof__(VAR) VAR = VAR##_myWeak_ #define myStrongif
-
IOS self和super详解实现原理及区别
self和super区别 1.self调用自己方法,super调用父类方法 2.self是类,super是预编译指令 3.[self class]和[super class]输出是一样的 self和super底层实现原理 1.当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找:而当使用 super 时,则从父类的方法列表中开始找,然后调用父类的这个方法. 2.当使用 self 调用时,会使用 objc_msgSend 函数: id objc_msgSend
-
IOS初始化控制器的实现方法总结
IOS初始化控制器的实现方法总结 一.ViewControllViewController方法 #import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @property(nonatomic,strong) ViewController *viewController; @end @implementation AppDelegate - (BOOL)applicati
-
iOS经验之初始化方法中不该设置self.view的属性浅析
前言 iOS初始化方法包括系统默认的和自定义的,常见系统初始化方法有init, initWithFrame:, initWithNibName:bundle:等,自定义则是各式各样.日常iOS项目开发过程中,我们经常在类的初始化方法中初始化接下来类需要用到的一些必要的数据或界面. 本文主要介绍的是关于iOS初始化方法不设置self.view属性的相关内容,属于 iOS小经验系列:累积平时看起来简单,但容易忽视的小经验,各路大佬敬请回避. 正文: 有个小伙伴新写了一个NextViewControl
-
浅谈SpringBoot中的Bean初始化方法 @PostConstruct
目录 注解说明 代码示例 注解示例 错误示例 正确示例 SpringBoot @PostConstruct虽好,也要慎用 1 问题的产生 2 案例模拟 3 总结 注解说明 使用注解: @PostConstruct 效果:在Bean初始化之后(构造方法和@Autowired之后)执行指定操作.经常用在将构造方法中的动作延迟. 备注:Bean初始化时候的执行顺序: 构造方法 -> @Autowired -> @PostConstruct 代码示例 注解示例 @Component public cl
-
springboot中项目启动时实现初始化方法加载参数
目录 springboot项目启动,初始化方法加载参数 1.@PostConstruct说明 2.@PreDestroy说明 第一种:注解@PostConstruct 第二种:实现CommandLineRunner接口 第三种:springboot的启动类 springboot初始化参数顺序 spring初始化参数顺序为 springboot项目启动,初始化方法加载参数 今天我看到项目中用到了 @PostConstruct 这个注解,之前没看到过,特地查了一下, 1.@PostConstruct
-
Swift中初始化方法的顺序介绍
与 Objective-C 不同,Swift 的初始化方法需要保证类型的所有属性都被初始化.所以初始化方法的调用顺序就很有讲究.在某个类的子类中,初始化方法里语句的顺序并不是随意的,我们需要保证在当前子类实例的成员初始化完成后才能调用父类的初始化方法: 复制代码 代码如下: class Cat { var name: String init() { name = "cat" } } class Tiger: Cat { let power
-
C++中COM组件初始化方法实例分析
本文实例讲述了C++中COM组件初始化方法.分享给大家供大家参考.具体如下: 这里使用BCB 在使用TADOConnect等组件时需要进行初始化 调用接口 : CoInitialize(NULL);//初始化COM套件 CoUninitialize();//释放COM套件 在DLL入口中调用: static bool isCoInitialize = false; //是否是自己进行的初始化 int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned l
-
Python中list初始化方法示例
本文实例讲述了Python中list初始化方法.分享给大家供大家参考,具体如下: 1.基本方法. lst = [1, 2, 3, 4, 5] 2.初始化连续数字. >>> lst = [n for n in range(5, 10)] >>> print(lst) [5, 6, 7, 8, 9] 3.初始化n个相同值.(两种方式) >>> lst = ['x' for n in range(5)] >>> print(lst) ['x
-
C语言中结构体(struct)的几种初始化方法
本文给大家总结的struct数据有3种初始化方法 1.顺序 2.C风格的乱序 3.C++风格的乱序 下面通过示例代码详细介绍这三种初始化方法. 1)顺序 这种方法很常见,在一般的介绍C的书中都有介绍.顺序初始化的特点是: 按照成员定义的顺序,从前到后逐个初始化:允许只初始化部分成员:在被初始化的成员之前,不能有未初始化的成员. 示例: struct User oneUser = {10, "Lucy", "/home/Lucy"}; 2)乱序(C风格) 顺序的缺陷是
-
6种方法初始化JAVA中的list集合
List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 1.常规方式 List<String> languages = new ArrayList<>(); languages.add("Java"); languages.add("PHP"); languages.add("Python"); System.out.println
-
解析iOS应用的UI开发中懒加载和xib的简单使用方法
懒加载 1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化 2.使用懒加载的好处: (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 3.代码示例 复制代码 代码如下: // // YYViewController.m //
-
iOS开发中使用UILabel设置字体的相关技巧小结
一.初始化 复制代码 代码如下: UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)]; [self.view addSubview:myLabel]; 二.设置文字 1.设置默认文本 复制代码 代码如下: NSString *text = @"标签文本"; myLabel.text = text; 效果: 2.设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不
随机推荐
- thinkPHP5框架渲染模板的3种方式简述
- JSP使用JDBC连接MYSQL数据库的方法
- JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
- bat脚本显示本机IP地址的两种方法(内网ip)
- jQuery简介_动力节点Java学院整理
- 使用Python简单的实现树莓派的WEB控制
- 浅谈Javascript中的函数、this以及原型
- JS实现的随机排序功能算法示例
- ThinkPHP应用模式扩展详解
- php结合ajax实现赞、顶、踩功能实例
- Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常
- android绘制圆形图片的两种方式示例
- Egret引擎开发指南之创建项目
- C语言泛型编程实例教程
- JavaScript判断数组重复内容的两种方法(推荐)
- 不错的批处理脚本 第一部分
- jQuery 1.9使用$.support替代$.browser的使用方法
- javascript动画之磁性吸附效果篇
- Linux下的SVN服务器搭建步骤
- Cocos2d-x保存用户游戏数据CCUserDefault类使用实例
其他
- idea 隐藏target
- ajax 传值给后台
- pyqt5 实现表格拖拽
- python自动生成sql
- vue 导航默认选中
- provide加inject和props的区别
- opencv画圣诞树
- r语言写入excel
- java synchronized 先进先出
- python 花瓣数据集分类
- C#控件Picturebox实现鼠标拖拽功能
- rocket更换broker 存储目录
- jpa @query 返回对象 limit
- 查看新建的DBlink
- uView实现发送验证码
- Android直播礼物连击
- android实现更改edittext的下划线颜色
- Python 鸡兔同笼
- notebook插件不显示
- 请输入 Github