Fork me on GitHub

第十讲.内存管理高级(属性内部实现原理,遍历构造器的内存管理,dealloc销毁内存的方法,多态)

 

一、属性的内部实现原理
    1.assign属性的语义特性及使用范围
 
Person.h 文件
 
 
 
assign的内部实现(会出面试题)
 
 
 
//在内存被系统回收之后,还在使用,容易产生野指针问题(例子如下)。
//assign适合基本数据类型,基本数据类型不会引起内存问题。
 
 
 
 
    2.retain属性的使用
 
retain属性的实现细节
 
在调用过程中想清楚过程
 
注意:(实现的过程)
 
 
   3.copy属性的使用
copy适用于接受了NSCopying协议的对象,因为只有接受了NSCopying协议,对象才能执行copy操作
 
copy的实现细节(注意里面对于内存的管理)
 
 
用内存管理的方式解析copy
 
 
注意:思路详解
 
 
二、dealloc内释放实例变量
    1. 什么是dealloc?
      dealloc是NSObject的一个实例方法,与alloc对应用于回收开辟的内存空间
      这个方法在对象引用计数为0时,由系统自动调用
      通常我们在dealloc中释放类的实例变量
    2. 如何使用dealloc?

      // Person.m

      - (void)dealloc

      {

          [_name release]; // 释放setter方法泄露的

          [super dealloc];

      }

    3. dealloc注意事项:
      永远不要手动调用dealloc
      在dealloc方法的最后一行,必须要写[super dealloc];
 
 
三、便利构造器方法的实现原理
 
   // 遍历构造器在使用的过程中要注意对内存的管理
   //遍历构造器的格式注意,同时在使用时要与初始化配合使用
 
 
return [p autorelease];是最完美的解决方案,既不会内存泄露,也不会产生野指针
 
 
注意:在遍历构造器的内部已经用autorelease进行了内存的释放管理,所以再使用release进行释放,会引起过度释放问题
 
 
四、collection的内存管理
      1>.collection:collection就是NSArray,NSDictionary,NSSet...等容器类
                 collection会自主管理自己内部的元素

      2>.加入collection中的对象会被retain

      3>.移除出collection的对象会被release

      4>.collection被释放会对内部所有对象release

 

五.多态

    1>.多态的含义:早上我和同事说口渴,想喝水。结果:A同事拿着我的杯子去给我接了一杯水。B同事顺手在饮水机上拿了一次性纸杯给我接了杯水。C同事给了我一瓶他早上刚买的饮料。同事得到的是同样地请求,但是三个人都有各自的解决办法,这就是多态。
多态就是不同对象在响应同一个请求时候不同的实现。父类指针可以指向子类对象。

  2>.多态的特点:

       a. 父类指针可以指向不同的子类对象
       b. 允许在多个类中定义同一个消息接口
       c. 可以屏蔽不同的子类之间的差异,可以通用代码
       d. 适应需求的不同变化

 

实例分析:

定义Animal类,和它的子类,Cat、Dog类:

Animal.h文件

 

 Animal.m文件

 

 cat.h文件(继承于Animal)

 cat.m文件

 

 

dog.h文件(继承于Animal)

 

 

dag.m文件

 

 

main.m文件(父类的同一方法,父类和多个子类可以同时响应,这就是多态)

 

 

 

 

 

 

 

 

 

 

 

posted @ 2015-09-04 20:32  DengHuiCheng  阅读(123)  评论(0编辑  收藏  举报