文章吧-经典好文章在线阅读:Effective Objective-C 2.0读后感10篇

当前的位置:文章吧 > 经典文章 > 读后感 >

Effective Objective-C 2.0读后感10篇

2018-07-13 04:14:01 来源:文章吧 阅读:载入中…

Effective Objective-C 2.0读后感10篇

  《Effective Objective-C 2.0》是一本由Matt Galloway著作机械工业出版社出版的平装图书,本书定价:69.00元,页数:220,特精心网络整理的一些读者读后感希望大家能有帮助

  《Effective Objective-C 2.0》读后感(一):如何写出优雅的 Objective-C 代码

  因为是从 Swift 开始学习 iOS 开发的,已经被 Swift 优雅简洁语法惯得不成样子了。所以在第一次看到 Objective-C 代码的时候的第一个反映就是,这什么鬼啊,怎么会有这样的语言:长长的方法名,散落一地的方括号,简直不忍卒读。不过,凡事都有一个过程,当慢慢地用 Objective-C 写了一些代码,做过一些项目之后,我就开始慢慢习惯了。由于 Objective-C 使用运行时来实现面向对象特性的,所以跟其它语言的语法形式还是存在很大的差别的,它没有严格意义上的私有属性,没有抽象类跟抽象方法,没有命名空间。于是我开始寻找关于它的最佳实践,也看过不少的 style guideline,不过这都是代码格式层面上的。

  直到我发现了这本书,虽说书里面的一些基本条款现在都已经成为事实标准了,被广大的 Objective-C 开发者所熟知并采用。但是除了这些基本的条款,里面还有很多值得学习的最佳实践。如果你是一个自我要求的 iOS 开发者,因为各种原因现在没有办法直接使用 Swift 来开发项目,那这本书可以算是必读的。

  任语言的语法有多怪异,只要你是一个自我要求的开发者,再遵循最佳实践,照样能写出优雅的代码来。

  《Effective Objective-C 2.0》读后感(二):OC进阶必读

  笔记

  2.在类的头文件中尽量少引用其他头文件

  1.尽量使用向前声明@class

  2.委托协议直接写在类中

  3.公共协议抽写成单独文件

  4.在分类中引用协议

  3.多使用字面量语法

  1.常量 @"abc" @1 @1.2f @YES @'a' @(x+y)

  2.数组 @[@"one",@"two",@"three"]

  3.字典 @{@"firstname":@"peng",@"lastname":"yuliang",@"age":@100}

  4.可变 NSMutableArray *arrM=[@[@"one",@"two"] mutableCopy];

  5.结构体 CGSize size={1,3};

  4.多用类型常量,少用#define预处理指令

  1.只在编译单元内可见的常量(k开头)

  .m

  tatic const int kNum=256;

  tatic NSString *const kID=@"ID";//从右往左读

  2.全局常量(以类名打头)

  .h

  extern NSString *const ClassNameID;

  @interface ClassName:NSObject

  @end

  .m

  tring *const ClassNameID=@"ID"

  @implementation ClassName

  @end

  5.用枚举表示状态选项、状态码

  1.2的幂枚举实现多选

  enum Direction{

  kNone = 0,

  kUp = 1<<0,

  kDown = 1<<1,

  kLeft = 1<<2,

  kRight = 1<<3

  };

  Direction dir=kUp|kLeft;//按位或

  if (dir&kUp) {//按位与

  Log(@"up");

  }

  if (dir&kDown) {

  Log(@"down");

  }

  2.如果枚举不需要互相组合,使用NS_ENUM ("可指明其底层数据类型")

  typedef NS_ENUM(short, Direction){

  kUp,

  kDown,

  kLeft,

  kRight

  };

  3.如果枚举需要互相组合,使用NS_OPTIONS ("主要是为了屏蔽不同编译器差异,底层进行了宏判断")

  typedef NS_OPTIONS(NSInteger, Direction) {

  kUp = 1<<0,

  kDown = 1<<1,

  kLeft = 1<<2,

  kRight = 1<<3

  };

  6.@property

  1.正确使用属性@property的attribute语义定义

  2.iOS中使用nonatomic,因为默认atomic会严重影响性能

  7.在对象内部尽量直接访问实例变量,属性存取本质都要经过消息传递调用

  1.对象内部直接通过实例变量读,copy属性需要通过属性写,需要KVO监测的通过属性写

  2.在初始化方法或dealloc中,总是应该直接通过实例变量来读写数据

  3.实现"懒加载(惰性初始化)"的,通过属性读取

  8.对象等同性监测

  1.isEqualToString:速度要比isEqual:快,类似有isEqualToArray:isEqualToDictionary

  2.若要检测对象等同性,请提供isEqual:与hash方法

  3.两个对象相同则哈希码相同,哈希码相同的两个对象不一定相同

  4.编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算法

  9.以"类族模式"隐藏实现细节(class cluster)

  1.工厂模式是创建类族的方法之一

  2.Cooca中有许多类族,大部分collection类都是类族

  10.使用前缀避免命名空间冲突

  1.3个字母以上,因为苹果公司保留使用所有两个字母前缀的权利

  2.给所有类、分类、分类方法、.m中C函数、全局变量等使用前缀

  3.使用第三方库也加上前缀

  11.提供"全能初始化方法"

  1.在类中提供一个全能初始化方法,并于文档里指明。其他初始化方法均调用此方法

  2.若全能初始化方法与超类不同,则需要覆写超类中的对应方法

  3.如果超类的初始化方法不适用于子类,那么应该覆写这个超类方法,并在其中抛出异常

  12.尽量创建不可变对象

  13.使用清晰协调的命名方式

  14.自动引用计数ARC

  1.ARC不是用的消息转发机制调用retain、release等而是直接调用的底层与之等价的C函数objc_retain等提升性能

  2.ARC有时甚至比手动更优化,比如如果一个对象被多次retain release,ARC可以精简这个过程成对移除这些操作

  3.ARC还有运行时组件进一步优化性能

  ARC开启异常捕获生成安全处理异常所需的清理的代码 -fobjc-arc-exceptions,不过会影响性能,默认关闭

  15.扩展中改变只读属性可读写使之可内部赋值

  16.用handler块降低代码分散程度

  17.多用派发队列少用同步锁

  18.多用GCD,少用performSelector系列方法

  19.多用块枚举,少用for循环

  Array *arr=@[@"one",@"two",@"three"];

  [arr enumerateObjectsWithOptions:NSEnumerationConcurrent|NSEnumerationReverse usingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) {

  Log(@"%@",obj);

  }];

  EnumerationConcurrent //开启块并发执行

  《Effective Objective-C 2.0》读后感(三):OC进阶必读

  笔记

  2.在类的头文件中尽量少引用其他头文件

  1.尽量使用向前声明@class

  2.委托协议直接写在类中

  3.公共协议抽写成单独文件

  4.在分类中引用协议

  3.多使用字面量语法

  1.常量 @"abc" @1 @1.2f @YES @'a' @(x+y)

  2.数组 @[@"one",@"two",@"three"]

  3.字典 @{@"firstname":@"peng",@"lastname":"yuliang",@"age":@100}

  4.可变 NSMutableArray *arrM=[@[@"one",@"two"] mutableCopy];

  5.结构体 CGSize size={1,3};

  4.多用类型常量,少用#define预处理指令

  1.只在编译单元内可见的常量(k开头)

  .m

  tatic const int kNum=256;

  tatic NSString *const kID=@"ID";//从右往左读

  2.全局常量(以类名打头)

  .h

  extern NSString *const ClassNameID;

  @interface ClassName:NSObject

  @end

  .m

  tring *const ClassNameID=@"ID"

  @implementation ClassName

  @end

  5.用枚举表示状态、选项、状态码

  1.2的幂枚举实现多选

  enum Direction{

  kNone = 0,

  kUp = 1<<0,

  kDown = 1<<1,

  kLeft = 1<<2,

  kRight = 1<<3

  };

  Direction dir=kUp|kLeft;//按位或

  if (dir&kUp) {//按位与

  Log(@"up");

  }

  if (dir&kDown) {

  Log(@"down");

  }

  2.如果枚举不需要互相组合,使用NS_ENUM ("可指明其底层数据类型")

  typedef NS_ENUM(short, Direction){

  kUp,

  kDown,

  kLeft,

  kRight

  };

  3.如果枚举需要互相组合,使用NS_OPTIONS ("主要是为了屏蔽不同编译器差异,底层进行了宏判断")

  typedef NS_OPTIONS(NSInteger, Direction) {

  kUp = 1<<0,

  kDown = 1<<1,

  kLeft = 1<<2,

  kRight = 1<<3

  };

  6.@property

  1.正确使用属性@property的attribute语义定义

  2.iOS中使用nonatomic,因为默认atomic会严重影响性能

  7.在对象内部尽量直接访问实例变量,属性存取本质都要经过消息传递调用

  1.对象内部直接通过实例变量读,copy属性需要通过属性写,需要KVO监测的通过属性写

  2.在初始化方法或dealloc中,总是应该直接通过实例变量来读写数据

  3.实现"懒加载(惰性初始化)"的,通过属性读取

  8.对象等同性监测

  1.isEqualToString:速度要比isEqual:快,类似有isEqualToArray:isEqualToDictionary

  2.若要检测对象等同性,请提供isEqual:与hash方法

  3.两个对象相同则哈希码相同,哈希码相同的两个对象不一定相同

  4.编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算法

  9.以"类族模式"隐藏实现细节(class cluster)

  1.工厂模式是创建类族的方法之一

  2.Cooca中有许多类族,大部分collection类都是类族

  10.使用前缀避免命名空间冲突

  1.3个字母以上,因为苹果公司保留使用所有两个字母前缀的权利

  2.给所有类、分类、分类方法、.m中C函数、全局变量等使用前缀

  3.使用第三方库也加上前缀

  11.提供"全能初始化方法"

  1.在类中提供一个全能初始化方法,并于文档里指明。其他初始化方法均调用此方法

  2.若全能初始化方法与超类不同,则需要覆写超类中的对应方法

  3.如果超类的初始化方法不适用于子类,那么应该覆写这个超类方法,并在其中抛出异常

  12.尽量创建不可变对象

  13.使用清晰而协调的命名方式

  14.自动引用计数ARC

  1.ARC不是用的消息转发机制调用retain、release等而是直接调用的底层与之等价的C函数objc_retain等提升性能

  2.ARC有时甚至比手动更优化,比如如果一个对象被多次retain release,ARC可以精简这个过程成对移除这些操作

  3.ARC还有运行时组件进一步优化性能

  ARC开启异常捕获生成安全处理异常所需的清理的代码 -fobjc-arc-exceptions,不过会影响性能,默认关闭

  15.扩展中改变只读属性可读写使之可内部赋值

  16.用handler块降低代码分散程度

  17.多用派发队列少用同步锁

  18.多用GCD,少用performSelector系列方法

  19.多用块枚举,少用for循环

  Array *arr=@[@"one",@"two",@"three"];

  [arr enumerateObjectsWithOptions:NSEnumerationConcurrent|NSEnumerationReverse usingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) {

  Log(@"%@",obj);

  }];

  EnumerationConcurrent //开启块并发执行

评价:

[匿名评论]登录注册

评论加载中……