第一章重点:

第一条:OC的起源

  1. OC由smalltalk语言演化而来的语言为消息结构(messaging structure)语言,其运行时所因执行的的代码由运行环境来决定;函数调用(function calling)语言(Java,C++)则由编译器决定。
  2. 分配在堆中的内存必须直接管理,而分配在栈中的内存用于保存变量的内存则会在其栈帧中弹出时自动清理掉。
  3. OC将堆内存管理抽象出来。不需要malloc和free来分配或释放对象所占的内存,这一套抽象管理框架叫:引用计数。
  4. 与预创建结构体相比,创建对象需要额外的开销,例如分配及释放堆内存等。
  5. OC为C添加了面向对象特性,是其的超集。OC使用动态绑定的消息结构,在运行时才会检查对象类型,接收到一条消息后,究竟应该执行何种代码由运行环境而非编译器来决定。

第二条:在内的头文件中尽量少引入其他有文件

  1. 除非必要,否则使用@class的方式向前声明体积别的类,并在实现文件中引入那些类的头文件,这样可以尽量降低类之间的耦合(话说没几个人这么做吧)。
  2. 在无法使用@class进行向前声明时,比如要声明某个类遵循的协议,这种情况下,尽量在这条声明放在“class-continuation分类”中,再不行就将协议单独放在一个头文件中。

第三条:多使用字面字面量语法(语法糖),少用与之等价的方法。

eg: NString *str = @"test"; 而不是:[NSString stringwhith.....];

NSNumber *nb = @2;  而不是:[NSnumber numberWith.....];

   NSArray *arr = [obj,obj,obj],而不是[NSArray arrayWhith.....];

  1. 尽量使用字面量语法创建字符串、数值、字典、数组。与创建此类对象的常规方法,字面量方法创建简明扼要。
  2. 已通过下标操作来访问数组或,通过key访问字典中对应的value。
  3. 用字面量创建数组或字典时,若值中有nil,则会抛出异常,引起字面量方法处理数组时,务必保证数组里面的值不为nil。

 

 第四条:多用类型产量,少用#define预处理指令

  1. 不要用预处理指令定义产量,这样定义出来的常量不含类型信息,编译器知识在编译器只是在编译前据此执行查找与替换操作。即使是有人重新定义常量值,编译器也不会产生警告信息,这将导致应用程序的常量值不一致(这个好像大部分人都不是这样做的)。
  2. 在实现文件中使用 static const来定义“只在编译单元内可见的产量(translation-unit-specific constant)。由于此产量不在全局符号中,所以无需为名称加前缀。
  3. 在有文件中使用extern来声明全局变量,并在相关实现文件中定义其值。这种产量要出现在全局符号表中,所以其名称应加以区分,通常与之相关的类名做前缀。
    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    extern NSString *const DemoStringConstant;
    
    @end
    #import "ViewController.h" @interface ViewController () @end static const NSTimeInterval kAnimationDuration = 0.3;
    NSString *const DemoStringConstant = @"MLCAnimatedViewExtenConstantString"; @implementation ViewController - (void)viewDidLoad {
    [super viewDidLoad];
    [UIView animateWithDuration:kAnimationDuration animations:^{ }];
    NSLog(DemoStringConstant);
    }

第五条:用枚举表示状态、选项、状态码

编写高质量iOS与OS X代码的52个有效方法的更多相关文章

  1. iOS书摘之编写高质量iOS与OS X代码的52个有效方法

    来自<Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法>一书的摘要总结 一.熟悉Objective-C 了解Objective-C语言的起源 ...

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

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

  3. 笔记 《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 》

    阅读此书的笔记点: 此书目录即是对知识点最好的总结 第1章 熟悉Objective-C ---------------------------------------------- 第1条:了解Obj ...

  4. 【读书笔记】--《编写高质量iOS与OS X代码的52个有效方法》

    1.Objective-C 起源: 在 C 语言基础上添加了面向对象特性,是 C 语言的超集.Objective-C 由 SmallTalk 语言演变过来,使用消息结构,运行环境由运行环境决定. OC ...

  5. 《编写高质量iOS与OS X代码的52个有效方法》书籍目录

    一.熟悉Objective-C 1.了解Objective-C语言的起源 2.在类的头文件中尽量少引入其他头文件 3.多用字面量语法,少用与之等价的方法 4.多用类型常量,少用#define预处理指令 ...

  6. 编写高质量iOS代码与OS X代码的effective 方法小结

    一.熟悉OC: 了解OC的起源: OC和C++,Java等面向对象语言类似,不过有很方面差别.因为该语言使用  消息结构而非函数调用. 消息结构和函数调用的区别:前者是在其运行时所应执行的代码由运行环 ...

  7. 编写高质量iOS代码与OS X代码的effective方法(小结)

    一.熟悉OC: 了解OC的起源: OC和C++,Java等面向对象语言类似,不过有很方面差别.因为该语言使用  消息结构而非函数调用. 消息结构和函数调用的区别:前者是在其运行时所应执行的代码由运行环 ...

  8. 编写高质量iOS代码的52个有效方法2-1

    一.变量的定义位置(用{}声明示例变量或者用@property属性声明实例变量) 1.用{}声明示例变量: 此方法生命的实例变量,编译器在编译时,会自动计算其偏移量(表示该变量距离存放对象的内存区域的 ...

  9. 编写高质量iOS代码的52个有效方法1-1

    一.使用向前声明(@class)的好处 1.有效减少编译器编译的时间: 2.有效避免循环引用: 二.字面量语法的好处 1.字面常量 精简.可用于所有数据类型,如: NSNumber *intNumbe ...

随机推荐

  1. 1.1 Java 的概述

    [什么是java]:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是有SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,Jav ...

  2. [都是原创]Php simplexml 添加节点

    Php simplexml 添加节点 原始代码如下 //================<? //创建xml对象$xml = new SimpleXMLElement('<Messages ...

  3. [Jmeter] Concurrency Thread Group

    Concurrency Thread Group : https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/ 参数介绍: Target Conc ...

  4. python连接Linux服务器

    import paramikoimport os #当前脚本路径CUR_PATH = os.path.dirname(__file__) #服务器ipHost=''Port=22#登录用户名Usern ...

  5. IOS初级:app的图标

    1,首先准备6张png图,分辨率一定要正确,不然报错(The app icon set named "AppIcon" did not have any applicable co ...

  6. myeclipse 上安装 Maven3

    myeclipse 上安装 Maven3   环境准备: JDK 1.6 Maven 3.0.4 myeclipse 8.6.1 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Mav ...

  7. mysql练习题3

    USE day44; -- 1 查出所有员工的名字,薪资,格式为 -- <名字:egon> <薪资:3000> SELECT '姓名:',name,'薪资:',salary f ...

  8. 【转】PHP实现验证码

    转自http://www.jb51.net/article/40341.htm 新建一个captcha.php: //验证码类class Captcha { private $charset = 'a ...

  9. 手机上输入http://192.168.1.102:8888/FiddlerRoot.cer为什么下载不了证书

    因为之前你的手机可能已经安装了该证书,所以再次下载会说找不到证书 解决办法:如果你遇到上面的问题,就可能是证书的问题(我的本地证书是用系统生成证书的一个软件生成的个人证书,所以出现了问题),操作步骤如 ...

  10. 深度学习中 epoch,[batch size], iterations概念解释

    one epoch:所有的训练样本完成一次Forword运算以及一次BP运算 batch size:一次Forword运算以及BP运算中所需要的训练样本数目,其实深度学习每一次参数的更新所需要损失函数 ...