记录一次模仿storyboard的过程

昨天放学,和老师聊天,他说出去以后,很少有项目用storyboard,一般都是纯代码,于是想把之前学过的模仿storyboard的过程复习一下。

首先,我们需要来到AppDelegate.m这个文件中的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这个方法中,写入如下代码

UIWindow* window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    [window makeKeyAndVisible];

    _window = window;

    ViewController* controller = [[ViewController alloc]init];

    window.rootViewController = controller;

    return YES;

需要注意的是:

1、要注意导入ViewController.h文件

2、对于ViewController的操作,在对应的.m文件中进行。不要写到这个方法中。

下面,让我们来说一下这里程序都做了什么

1、声明一个UIWindow对象,这里需要注意的是,一定要给UIWindow对象设置frame,否则,无法显示

2、将窗口设置为主窗口,并显示,同样,如果不这样设置,运行得到的是一片黑

3、将成员变量指向这个创建的对象

4、创建一个controller对象

5、将window的根控制器设置为刚才创建的那个控制器

6、返回

下面让我们在扩展一下:

1、app启动过程:

先执行main.m,这里执行了UIApplicationMain,这里第三个参数指定UIApplication类或子类,如果为nil则默认为UIApplication,第四个为代理类名。这里使用了反射机制来获取类名。之后会加载info.plist文件,然后会判断,是否需要storyborad,如果有,则加载,如果没有,则通过上述的方法进行创建。所以,这里我们不能再创建名字包含info的plist文件

2、UIApplication对于每一个app都只有一个,并且是单例

3、这里我们引用一个MJ的图片,来进行说明一下各个类之间的关系

时间: 2024-12-20 08:32:03

记录一次模仿storyboard的过程的相关文章

记一次删除Git记录中的大文件的过程

app/test/target/ #查看大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" #删除大文件或者目录 git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch app/

记录一下我的排查问题过程实例

其实实习这么久,花最多时间还是在排查自己代码出的问题上面去. 其实也没有什么统一的方法,我自己也不喜欢断点调试. 总结一点:认真看报错和日志!然后一层一层寻找问题所在. 感觉就像在玩侦探破案游戏一样,找到了问题并且解决是很有成就感的(我并不是QA哈哈) 记录一下自己出的bug 1.数据库 感觉数据库的问题,报错都挺明显的,只不过很长,注意看就行了. {   "isError": true,   "message": "\n### Error updatin

记录一个前端bug的解决过程

人在江湖飘,哪能不挨刀. 我挨了重重一bug.严格来讲这可能是我职业生涯以来的首个悲惨经历,因为凭我的知识储备和经验,基本上任何可重现的bug都是可解的.然而这个bug却困扰了我三个月之久,它具有以下生理特征: 后台日志能统计到异常,偶发.低频 报异常的用户设备不具有规律性,什么手机都有 我们自己无法复现,任何设备.任何环境都没复现 打电话回访报异常的用户,确实存在问题 客服未接到用户主动反馈这个异常 此bug并不是js报错,而是一个业务逻辑的错误.表现是,用户提交的数据莫名缺失.场景是以下这个

记录一次redis数据库搭建过程并详细说明配置

redis.conf配置文件详解 Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize no 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定pidfile /var/run/redis.pid 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女

记录一次Mysql死锁排查过程

背景 以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁.借着这个机会又重新学习了一下mysql的死锁知识以及常见的死锁场景.在多方调研以及和同事们的讨论下终于发现了这个死锁问题的成因,收获颇多.虽然是后端程序员,我们不需要像DBA一样深入地去分析与锁相关的源码,但是如果我们能够掌握基本的死锁排查方法,对我们的日常开发还是大有裨益的. 死锁起因 先介绍一下数据库和表情况,因为涉及到公司内部真实的数据,所以以下都做了模拟,不会影响具体的分析. 我们

记录一下学习VC的初步过程.

有需要把状态栏图标缓存清空. 找到DELPHI和E语言的例子.最近学VC所以要改成VC的. 做控件的时候发现函数不能直接控制控件.在网上找了半天相关资料,都是说要包含"resource.h" 可是我已经包含了..最后发现,所说要包含的,都是控件事件去控制控件.而我是函数过程控制.但是函数过程是不在控件作用域的. 所以把自己函数添加到窗口类里.就没问题了........... 我是新手,可能理解的不对或者操作有错.还希望看到的大牛指点指点啊~

记录联想Thinkpad s430添加内存条过程

添加内存条主要注意类型和频率即可,淘宝上都能买得到.第一次拆机,没搞懂怎么拆开,还是上网查看才明白.Thinkpad S430要敲开键盘才能拆开,看到内存硬盘CPU等. 总结一下这个过程: 查看笔记本原装内存条信息: 选购内存条(注意内存大小.类型(DDR3.DDR3L等).频率): 拆机(如果拆不开,或者不知道怎么下手拆解,一定要上网查找拆机教程,别随便乱拆): 安装内存条,使劲把内存条插入插槽(我的笔记本内存插槽一开始不使劲差不进去),使用两边的弹片卡住内存条: 拧下底部螺丝,敲开键盘 掀开

cenos下安装MySQL最新版(5.7.18)记录。附卸载老版本过程

首先说明:老版本数据库没有数据,所以无数据备份过程.如果你在升级数据库过程里,需要备份数据,请另外自行处理. 1.下载最新版MySQL.解压待用 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz #下载tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz #解压cp -r mysql-5.7.18-linux-g

记录一次搭建DDNS的过程

背景:因为笔记本配置较低,如果在本本上安装一个oracle的话太影响计算机性能,但是又想在自己能带着走的笔记本上随时可以编程.所以,我在自己家里配置较高的台式机上使用vmware安装了两台虚拟机服务器,分别是windows server 2012的系统和CentOS6的系统,在windows server 2012上安装了oracle数据库,在CentOS上安装了tomcat,作为web服务器. 需求:外网通过域名访问自己家里的台式机的数据库服务. 步骤: 1. 首先,我需要一个支持DDNS动态