在oc中如果没有使用ARC的话,手动管理内存一定要注意处理好“野指针”,通常我们在释放指针的指向的地址时,都要将指针赋值为nil,这样能有效的防止野指针。常用的关键字:retain、assign 、strong、weak
组合和继承都是提高代码可重用性的手段,在有些情况下,采用组合关系或者继承关系能完成同样的任务,组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应。组合是has-a的关系,继承是is-a的关系。组合最主要的优势是不会破坏封装,是系统具有较好的松耦合性,更加易于维护。继承缺点:(1)当层级越来越多时,假如每个层级都有实例变量,那么最下层的子类继承的实例变量就会超级多,显得沉重;(2)当消息传递从子类往上时,层级越多,效率就越低下。组合缺点:需要创建比继承更多的对象,耦合度比继承弱。
继承的一些注意事项:
a.子类的实例变量不能与父类重名。
b.子类初始化出的对象既可以调用自己的函数,也可以调用父类的函数,因为都继承过来了。
c. 父类的实例变量类型在子类中不变,子类只能直接访问父类中的public和protected类型的实例变量,父类和子类直有 public可以直接用 -> 调用。
d.子类的方法可以覆盖父类的方法(如果方法名、参数个数、参数类型、方法返回值类型都一样时),子类的方法一般更为具体,父类的方法更抽象。
e.多级继承下的初始化规则,一是应该重新载入init;二是在自己类中写指定的初始化方法;三是自己类的init方法调用自己类的指定初始化方法;四是自己类的指定初始化方法调用父类的指定初始化方法。 否则会出现递归调用。
f.消息查找规则,先查找本类,然后再往父类查找,需要注意的是有时虽然用B类创建了b对象,用[b display]调用display方法,且display调用了父类的[super display]方法,但对象还是本类对象,所以值还是本类初始化的那个值。
组合注意:
a.组合与继承实现的功能虽然差不多,但他们实现的形式不一样,区分就需要记住他们各自的形式。
b.能使用组合的地方尽量使用组合。
例:
ASPoint
ASRectangle
main