编写高质量代码-OC 第8章 定制init...和delloc

50、了解对象的alloca和init...

  • 1、alloc方法使用应用程序默认的虚存区。区是一个按页对齐的内存区域,用于存放应用程序分配的对象和数据
  • 2、alloc分配过程不仅进行对象的内存分配,还初始化的对象的两个小而非常重要的属性,及它的isa实例变量和保持数
  • 3、子类可以不采用带参数的初始化方法,而实现一个简单的init方法 ,并在初始化后马上使用“set”存取方法,将对象设置为有用的初始状态。
  • 4、工厂方法则可以避免为可能没有用的对象盲目分配内存。

51、直接访问实例变量的init...方法

  • 1、应始终从内初始化方法来直接访问实例变量,因为在设置属性时,该对象的其余部分可能尚未完全初始化。
  • 2、父类可能无法正确初始化的对象,并返回nil,故要经常检查,确保self不为零,然后再执行自己的初始化。
  • 3、继承一个类要使用多个初始化方法时,写初始化方法,要考虑到重写父类指定的初始化设定项来执行自己的初始化,或添加自己的附加初始化设定项。

52、初始化方法必须以“init”字母开头

  • 1、如果一个对象没有实现自己的初始化方法,Cocoa就会调用其最近的祖先对象的方法。
  • 2、对于不需要初始化其他数据的子类,重载init方法就可以,但是常见的情况是初始化阶段需要根据外部的数据来设置对象的初始状态。

53、从init...方法得到的对象可能是不想要的

  • 1、init...方法得到的对象可能不是读者认为的,正在被初始化的对象。
  • 2、init...方法并不是一定能执行其他对象请求的初始化。
  • 3、在创建对象时,通常应该在处理之前检查返回值是否为nil
  • 4、一旦对象被初始化了,就不应该在进行初始化,否则,容易产生抛出。

54、实现init...方法的唯一性或者指定性并非“不可能”

  • 1、实现init...方法的唯一性或者指定性并非“不可能”。
  • 2、调用super的初始化方法可以却确保继承链上方的类定义的实例变量都率先得到初始化。
  • 3、在创建子类时需要关注通过继承得到的初始化方法。因为,有些时候,基类的init...方法已经为类做好足够的初始化,但是更多地可能是没有做好的,因此应该对其进行重载。

55、init...方法有“轻重级别”之分

  • 1、进行对象的初始化,要注意轻重之分
  • 2、指定初始化方法是通过发向super的消息彼此链接在一起的,而其他的初始化方法则通过发向self的消息和其所属类的指定初始化方法连接在一起

 

posted @ 2015-11-08 00:38  小沈曰  阅读(213)  评论(0编辑  收藏  举报