熟悉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 ...
随机推荐
- session失效问题
具体设置很简单,方法有三种: ()在主页面或者公共页面中加入:session.setMaxInactiveInterval();参数600单位是秒,即在没有10分钟活动后,session将失效. 这里 ...
- Vue源码后记-其余内置指令(3)
其实吧,写这些后记我才真正了解到vue源码的精髓,之前的跑源码跟闹着玩一样. go! 之前将AST转换成了render函数,跳出来后,由于仍是字符串,所以调用了makeFunction将其转换成了真正 ...
- Vue源码后记-vFor列表渲染(3)
这一节肯定能完! 经过DOM字符串的AST转化,再通过render变成vnode,最后就剩下patch到页面上了. render函数跑完应该是在这里: function mountComponent( ...
- scp命令,用来在本地和远程相互传递文件,非常方便
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...
- 面试题----寻找比一个N位数大的“下”一个数
题目描述 写出一个算法,实现如下功能: 给定一个N位数字组成的数,找出比这个数大的由相同数字组成的下一个数 例如:如果数字为 25468, 则结果为25486 如果数字为 21765, 则结果为 25 ...
- jquery getScript动态加载JS方法改进详解[转载]
转载自http://www.jb51.net/article/31973.htm 有许多朋友需要使用getScript方法动态加载JS,本文将详细介绍此功能的实现方法 $.getScript( ...
- CSS3详解:transform、transition
CSS3 transform是什么? transform的含义是:改变,使-变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...
- Apple 公司开发者账号添加团队成员
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Scrum Meeting Alpha - 5
Scrum Meeting Alpha - 5 NewTeam 2017/10/20 地点:主楼与4号楼之间的走廊2楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了对班级作业部分的API的包 ...
- 40个Java多线程问题
1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然 ...