熟悉Objective—C
1.oc使用消息结构而非函数调用
使用消息结构的语言,运行时所应执行的代码由运行环境来决定,而是用函数调用的语言,则由编译器决定。函数调用:如果调用的函数是多态的,那么在运行时就要按照“虚方法表”来查找到底应该执行哪个函数实现。消息结构:不论是否多态,总是在运行时才会去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型,接收消息的对象问题也要在运行时处理,这个过程叫做动态绑定。
2.oc创建一个新的对象时,指针存放在栈上,指针所指向的内存区域分配在堆中,分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其帧栈弹出时自动清理。
在oc代码中,有时会遇到定义中不含*的变量,他们可能会存放在“栈空间”,比如CGRect,CGRect是c结构体,如果改成oc对象的话,性能会受影响。与创建结构体相比,创建对象还需要额外花销,例如分配及释放堆内存等,如果只需保存int,float,,double,char等“非对象类型”,那么通常使用CGRect这种结构体就够了。
3.向前声明(@class),将引入头文件的实机尽量延后,只有在确有需要时才引入,这样可以减少类的使用者所需要引入的头文件数量,减少编译时间,也解决了两个类互相引用的问题。两个类循环引用虽然不会导致死循环,但两个类中有一个将无法正常编译。有时无法使用向前声明,比如要声明某个类遵循某一项协议。尽量吧“该类遵循某一项协议”的这条声明移到类扩展中,如果不行的话,就把协议单独分配在一个头文件中,然后将其引入。
4.多用字面量语法(语法糖)
使用字面量语法,可以缩减源代码长度,使其更为易懂,用字面量语法创建数组时,若数组中有空对象(nil),则会抛出异常,使用字面量语法更为安全,应该通过取下标操作来访问数组对象或字典中的键所对应的元素;用字面量语法创建数组或字典是,务必确保值里不含nil。
5.多用类型常量,少用#define预处理指令
变量一定要同时使用static与const来声明,如果试图修改由const修饰符所声明的常量,编译器会报错,而static则意味着该变量仅在此变量的编译单元中可见,若声明此变量不加static,则编译器会为它创建一个“外部符号”(external symbol),此时若是另一个编译单元中也声明了同名变量,那么编译器就会报错。若要对外公开,将次变量放在“全局符号区”,以便可以在定义该变量的编译单元外使用,应该这样来定义:
//头文件中
extern NSString *const EOCStringConstant
//实现文件中
NSString *const EOCStringConstant = @"VALUE";
不要用预处理指令定义常量,这样定义出来的常量不含类型信息,编译器只会在编译前据此执行查找与替换操作。即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致。
6.用枚举表示状态,选项,状态码
如果把传递给某个方法的选项表示为枚举类型,而多个选项又可以同时使用,那么就将各选项值定义为2的幂,以便通过按位或操作将其组合以来NS_ENUM定义正常枚举类型,NS_OPTIONS定义组合枚举类型,在处理枚举类型的switch语句中不要使用default分支,这样加入新枚举以后,编译器就会提示开发者,switch语句并未处理所有枚举
熟悉Objective—C的更多相关文章
- 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法
第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法 第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...
- Effective Objective-C 的读书笔记
本文主要是摘录了 <Effective Objective-C 2.0>一书中提到的编写高质量iOS 代码的几个方法. 1 熟悉Objective -C 1.1 OC 起源 OC 为C语言 ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- 刨根问底Objective-C Runtime
http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...
- Windows下搭建objective C开发环境
摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...
- Windows在结构objective C开发环境
对于近期打算iPhone.iPod touch和iPad开发一些应用程序,所以.需要开始学习Objective C(苹果推出的类似C语言的开发语言).因为苹果的自我封闭的产业链发展模式(从芯片.机器. ...
- 刨根问底Objective-C Runtime(4)- 成员变量与属性
http://chun.tips/blog/2014/11/08/bao-gen-wen-di-objective[nil]c-runtime(4)[nil]-cheng-yuan-bian-lian ...
- 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)
招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...
- 学习Spring——两个你熟悉的不能再熟悉的场景使用
最近公众号受邀获取了留言和赠送模板的权限,小开心(欢迎去公众号JackieZheng围观). 我们大致的了解了Spring这个框架对于依赖注入的使用和诠释可谓是淋漓尽致.因为有了Spring的这个IO ...
随机推荐
- <c:forEach items="${list}" var="tt" varStatus="status"> 的相关大小长度
<c:forEach items="${list}" var="tt" varStatus="status"> ${status ...
- WPF获得全局窗体句柄,并响应全局键盘事件
场景 wpf窗体运行后,只能捕获当前Active窗体的按键事件,如果要监听windows全局事件,并对当前窗口事件响应. 第一步:导入Winows API public class Win32 { [ ...
- C++11 static_assert
C++11 static_assert C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言. 其语法:static_assert(常量表达式,提示字符串). ...
- ACM课程总结
当我还是一个被P哥哥忽悠来的无知少年时,以为编程只有C语言那么点东西,半个学期学完C语言的我以为天下无敌了,谁知自从有了杭电练习题之后,才发现自己简直就是渣渣--咳咳进入正题: STL篇: 成长为一名 ...
- zabbix 2.2.20 安装详解(Centos6.9)
环境说明 [root@centos ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@centos ~]# uname -a L ...
- day4--老Word模板使用指南
Word常用快捷键 Ctrl + 1 一级标题 Ctrl + 2 二级标题 Ctrl + 3 三级标题 Ctrl + 5 代码块输入 Ctrl + 6 正文输入 专业的排版,一定要规范,目录,生成目录
- Celery 源码解析四: 定时任务的实现
在系列中的第二篇我们已经看过了 Celery 中的执行引擎是如何执行任务的,并且在第三篇中也介绍了任务的对象,但是,目前我们看到的都是被动的任务执行,也就是说目前执行的任务都是第三方调用发送过来的.可 ...
- canvas画布实现手写签名效果
最近项目中涉及到移动端手写签名的功能需求,将实现代码记录于此,供小伙伴们参考指摘哦~ HTML代码: <!--手写区--> <div class="mSign_signMa ...
- [转载] 说说JSON和JSONP,也许你会豁然开朗
转载自http://kb.cnblogs.com/page/139725/ 前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了 ...
- [转载] Redis之七种武器
转载自http://blog.nosqlfan.com/html/2942.html?ref=rediszt 长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的七种武器,而本文打算将Re ...