第一章重点:

第一条: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. 探索未知种族之osg类生物---器官初始化一

    我们把ViewerBase::frame()比作osg这类生物的肺,首先我们先来大概的看一下‘肺’长什么样子,有哪几部分组成.在这之前得对一些固定的零件进行说明,例如_done代表osg的viewer ...

  2. 采用RedisLive监控Redis服务——安装手册

    #1.gcc编译环境确认 .tgz cd Python- ./configure /bin/python2. /usr/bin/python #运行python查看版本 python -V #进行更改 ...

  3. libpcap 库使用(一)

    参考资料: http://www.tcpdump.org/ DESCRIPTION The Packet Capture library provides a high level interface ...

  4. python爬虫之urlError异常处理

    1.URLError URLError产生的原因: (1)网络无连接,即本机无法上网 (2)连接不到特定的服务器 (3)服务器不存在 import urllib.request import urll ...

  5. DNSlog实现Mysql注入

    step1: 通过DNSlog盲注需要用到load_file()函数.show variables like '%secure%' 查看load_file()可以读取的磁盘. 1.当secure_fi ...

  6. 那些年,UI设计师还在手工标注和切图时走的弯路

    在我从事UI设计师这几年的工作中逐渐发现,最让人糟心的不是应付各种奇葩的需求,完成设计稿,而是交付.每次交付的设计稿和最后开发出来的产品总是让我心塞无比,很少最终产品和我的设计稿是完全一致的. UI设 ...

  7. 我的MVP呢?

    Ladies and gentelmen, welcome the MVP of NBA 16-2017 Season:... 呃,等下,好像哪里不对.那是因为,我要说的MVP根本就不是Most Va ...

  8. MySQLdb与sqlalchemy的简单封装

    一:MySQLdb # !/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb import MySQLdb.cursors import co ...

  9. 2016年3月31日_应化所群体Review

    Review目的: Phonegap的ble插件可以接收到设备发送的信息,但接收并在控制台显示的数据夏一鸣不知道是正确的数据,还是由于编码解码问题导致的乱码问题.此次Review要解决的问题即判断接收 ...

  10. 别人的Linux私房菜(1)计算机概论

    计算机主板 早期两个网桥控制通信,北桥连接速度比较快的CPU.内存.显卡.南桥连接较慢的接口,如硬盘,USB,网卡等.北桥的控制器集成到了CPU中. CPU工作频率 外频:CPU与外部组件进行数据传输 ...