autoreleasepool 自动释放池 1.池 节约空间 节资源 "共享"。 2.通过自动释放池来管理对象,只需要一个自动释放池,可以管理很多对象,当自动释放池结束的时候,会自动向池中的每个对象都发送release消息。 3.自动释放池是可以嵌套的,会先释放里面的,再释放外面的。 4.工厂方法通常都实现了发送autorelease消息。 三、面向对象的三大特征:封装、继承、多态 1.封装 封装属性和方法放在一个对象中,只给外界公开访问的接口,而且把具体实现隐藏起来。主要目的增加可读性、可维护性、可扩展性。 在OC中,把需要公开的属性、方法定义在声明中,.h文件中interface部分,而把不需要公开的属性、方法定义在.m文件中implementation部分,隐藏起来。 封装的好处: 1)代码结构更清晰 2)可以和第三方合作,但又保护了源代码,避免泄漏。 2.OC中实例变量的处理: 一般情况下,实例变量是不能公开的,所以实例变量应用定义在implementation部分(私有的),除非你需要直接在子类中访问,可以定义在interface部分,可以使用以下语法声明实例变量,来控制实例变量的访问范围。 a.变量的访问范围: @public 可以在任意位置访问 @package 可以在包内部访问,一个项目一定是在同一个包下。 @protected 可以在本类内部和子类内部访问 @private 只可以在本类的内部分访问 b.默认实例变量修饰符:@protected c.可以通过"->"可以访问实例变量(但不推荐),通过.语法(属性)来访问实例变量。 3.封装中的方法 a.如果.h文件中,未声明方法,此方法就是私有的,在其它文件中访问该方法是不合法的(必须不能访问)。 b.如果.h文件中,声明方法,此方法就是公有的,在其它文件中可以访问该方法的。 4.继承 a.概念 继承是一种代码复用技术,是类与类之间的一种关系。 A类继承B类,A类中就直接拥有B类中的属性和方法。我们就把A类叫B类的子类(派生类),把B类叫做A类的父类(基类)。 4.继承 b.继承方式 单继承 一个类只能继承一个父类。 爷<-爸<-你 OC Java C# 多继承 一个类可以有多个父类 C++ 4.继承 c.继承的语法 @interface 类:父类 (所有类都继承于NSObject) @end d.继承是一种关系 继承是类与类之间的关系,是一种"is a"关系。 狗是动物 狗:动物 e.方法的覆盖(重写) 子类对父类继承的方法不满意,可以在子类中重写父类的方法 1)方法名相同 2)参数类型相同 3)返回值类型相同 f.如果重写父类的方法,优先调用子类的方法,如果子类没有重写父类的方法,则调用父类的方法。
一、继承的缺陷 1.提高了程序的复杂度,维护性和扩展性降低 2.破坏类的封装性 二、为什么使用继承 1.代码复用 2.制定规则 3.为了多态 三、组合和*聚合 复用代码更好的方法是组合和聚合,而不是继承。 组合和聚合也是类与类之间的"has a"的关系。 Computer has a cpu. a.继承 一个对象 b.组合 代码书写习惯 优点:保留了封装性、操作便利 缺点:灵活度不够。 生命周期:Cpu和Computer封装性是独立的,生命周期是一致的,一起存在,一起销毁。高耦合(依赖)在一起。 c.*聚合 保留封装性 优点:灵活度高 缺点:操作欠佳 生命周期:Cpu和Computer生命周期不一致,低耦合,方便Cpu的替换。两个对象,各过各的。
|