Objective-C iOS纯代码布局 一堆代码可以放这里!
前言:
最近写的文章都是创业类,好吧,今天好好写写技术类的文章!
不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是objective-c,由于速成的很快,好累!
好在现在基本已经入了点门道了,这才看的懂新人的代码,才能提前感受代码危机。
对于IOS的速成口诀,回头再分享,今天先分享一个简单的抽象封装!
1:先看看问题
说明:通常对于界面布局,有编写代码、Xib、Storyboard三种方式,而我看到新人写的,是通过代码布局的。
看到的代码是这样的:
A:编写UI的代码已分离到新的类(.h .m文件)去,但仍然还是留下了不少代码在ViewController中。
图1:(在页加载完后,调用了SetView方法,然后SetView方法里一堆和UI相关的代码)
图2:
2:想想怎么优化
目标:让每一个Controller都有一个对应的View的UI类,而Controller类里不要涉及UI创建的问题,尽量0入侵。
折腾过程:
这几天学了下ObjectC的扩展类Category,觉的这东东有点搞头。(和C#里的扩展类很像,但不同的是,object-C里扩展方法可以在基类里调到,这很神奇)
可惜扩展类不支持属性,没法把一些变量放到扩展类的属性里,逼的要入侵Controller。
于是我又思考,折衷一下,用泛型定义一个共性的UIView,以避开入侵。
结果还是失败了,objective-C的泛型不支持子类定义类型,唉~~~~
发现在C#轻松搞定的事,在object-c里不容易啊!!!
3:二次折衷的方法:
1:定义Controller的基类,定义一个方法,并在页面加载时调用。
2:假设有LoginController,新建一个LoginView,继承自UIView
3:一些UI相关的定义变量就写在这里了(.h文件)
4:在LoginView添加一个扩展类(不用新建类文件了,直接追加代码就好了):
这里扩展了一个方法叫initUI(等于重写基类的方法)
5:这里就是唯一二次折衷的地方,需要入侵Controller.h,定义一个UI属性。
(之前是想通过把这个属性定义到基类去,可惜泛型不支持子类指定类型)
6:接下来就是写你的UI相关的代码了。
总结:
1:手工写的代码的可视化,在调试阶段才能看到,这是很悲催的结果。
2:个人不太建议手工布局代码的,开发效率也是个问题(当然你可以通过封装一些UI代码进一步提升下效率)。
3:不知道XCode没有折叠.h文件到.m文件下的插件呢?文件太多,切来切去太伤眼了。
本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/p/6843564.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
通过短信传播的Android病毒席卷丹麦
2月17日消息,据国外媒体报道,丹麦安全公司Heimdal Security周二表示在Android平台上发现一种名为Mazar的病毒。该病毒可通过短信方式传播,而一旦被成功安装,手机流量就会被偷偷通过恶意代理全部转至攻击者指定服务器,从而造成敏感信息的泄漏。 Heimdal指出,目前丹麦已有大约10万部Android智能手机被感染,而当前也很难评估Mazar的传播速度。特别值得一提的是,Mazar在传播过程中会“放过”任何将语言设置为俄语的智能手机,此举或是为了避免引起俄罗斯警方的注意。 Mazar的传播并没有太神奇技术。病毒通过短信方式发送含恶意代码的链接,如果接收者不去打开链接,则不会受到感染。即使用户不小心点击了链接,如没系统本身没有开启允许安装Google Play商店以外的的应用,则也不会被感染。 目前已确定Kit Kat版本的Anddroid会受到病毒影响,相信更早期版本也不会对其免疫。 本文转自d1net(转载)
- 下一篇
在iOS8上使用TestFlight进行Beta测试
什么是Grinder? Grinder是一个JavaTM负载测试框架,支持分布式测试,且是开源的。 官网及下载:SourceForge.net. The Grinder processes Grinder是一个将测试脚本运行在多个机器上的框架。Grinder框架由三个process(或program)组成: worker processes, agent processes, 和console. 每种process的职责如下: Worker processes 解释Jython测试脚本,并启动worker线程进行测试 Agent processes 管理 worker processes The console 协调其他的 processes 数据的收集,处理及显示 测试脚本的编辑及分发 Grinder由Java编写,其中每个processes都是一个java虚拟机(JVM)。 在进行负载测试时,应该在每个测试机上启动一个代理线程。代理进程启动的所有worker进程都可以由同一个控制台进行控制和监视。在每个测试机上都启动多个代理进程是非常没有必要的,但是如果你愿意也可以这样做。 使用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)