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的更多相关文章

  1. 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法

    第一章 熟悉Objective -C   编写高质量iOS与OS  X代码的52 个有效方法   第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...

  2. Effective Objective-C 的读书笔记

    本文主要是摘录了 <Effective Objective-C 2.0>一书中提到的编写高质量iOS 代码的几个方法. 1 熟悉Objective -C 1.1 OC 起源 OC 为C语言 ...

  3. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  4. 刨根问底Objective-C Runtime

    http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...

  5. Windows下搭建objective C开发环境

    摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...

  6. Windows在结构objective C开发环境

    对于近期打算iPhone.iPod touch和iPad开发一些应用程序,所以.需要开始学习Objective C(苹果推出的类似C语言的开发语言).因为苹果的自我封闭的产业链发展模式(从芯片.机器. ...

  7. 刨根问底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 ...

  8. 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)

    招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...

  9. 学习Spring——两个你熟悉的不能再熟悉的场景使用

    最近公众号受邀获取了留言和赠送模板的权限,小开心(欢迎去公众号JackieZheng围观). 我们大致的了解了Spring这个框架对于依赖注入的使用和诠释可谓是淋漓尽致.因为有了Spring的这个IO ...

随机推荐

  1. java的windows自动化-自动运行java程序

    那么在一些工具齐全并且已经有了一定的写好的java程序的情况下(环境变量和软件见上一章http://www.cnblogs.com/xuezhezlr/p/7718273.html),如何自动化运行j ...

  2. Nginx-OpenResty安装配置

    上两篇中介绍了: Ngnix技术研究系列1-通过应用场景看Nginx的反向代理 Ngnix技术研究系列2-基于Redis实现动态路由 发现,应该加一篇OpenResty的安装部署说明,方便大家按图索骥 ...

  3. LeetCode 35. Search Insert Position (搜索嵌入的位置)

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  4. HDU1019 Least Common Multiple(多个数的最小公倍数)

    The least common multiple (LCM) of a set of positive integers is the smallest positive integer which ...

  5. Paint the Grid Reloaded(缩点,DFS+BFS)

    Leo has a grid with N rows and M columns. All cells are painted with either black or white initially ...

  6. poj 1155 TELE(树形DP)

    TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4863   Accepted: 2673 Description ...

  7. 【转载】目前主流过滤XSS的三种技术

    目前主流过滤XSS的三种技术 过滤 过滤,顾名思义,就是将提交上来的数据中的敏感词汇直接过滤掉.例如对"<script>"."<a>". ...

  8. Android 开发笔记___SD卡基本操作__图片读取写入

    package com.example.alimjan.hello_world.Utils; import android.graphics.Bitmap; import android.graphi ...

  9. TestNG并行测试

    并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力.TestNG允许我们以并行(多线程)的方式来执行测试.这就意味着基于TestNG测试组 ...

  10. 深入分析Android动画(二)

    上回书说到Android动画的分类以及基本使用,这会书主要说Android属性动画的原理,对于View动画的原理本篇不做深入分析.对于Android动画的基础请看深入分析Android动画(一) 我们 ...