黑马-OC语法-内存管理

原创 2015年07月07日 18:54:40

       定义

内存管理:基本类型数据int、char、float、double、struct、enum等是存在里)由操作系统自己释放,而OC对象由程序员自己释放,不释放的花程序结束时由系统释放(),内存使用由4个字节的引用计数器来控制,当计数器为0时,对象被回收,当使用allocnew来创建一个新对象时,新对象的引用计数器默认就是1。

僵尸对象:所占内存已经被回收的对象。(僵尸对象不能被再使用

野指针:指向僵尸对的指针(不可用内存),给野指针发送消息会报错。(错误信息EXC_BAD_ACCESS)。

空指针:没有指向任何东西的指针。(储存的东西是nil,null,0)给空指针发送消息不会报错(Java会报错)。

       注:程序闪退有可能是给释放的对象发送消息


retain : 当给对象发送一条retain消息,可以使引用计数器值+1。(retain方法会返回对象本身
release:当给对象发送一条release消息计数器-1.(没有返回值
retainCount:获得当前的计数器

dealloc方法:当一个对象要被回收的时候,就会调用。 重写方法时一定要调用[super dealloc],这句调用要放在最后面。对self(当前)所拥有的其他对象做 一次release

e.g.:

- (void)dealloc

[super dealloc];

  }

 dealloc原则:

 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)

         set方法内存管理的代码规范:

 1.如果是基本数据类型直接赋值。

        2.如果是OC对象要先对就对象做一次release,给新对象retain。

e.g.:

 - (void)setCar:(Car *)car
 {
  1.先判断是不是新传进来对象
    if ( car != _car )
    {
    2.对旧对象做一次release
        [_car release];
 
   
 3.对新对象做一次retain
        _car = [car retain];
    }
  } 

  - (void)dealloc
 {
    [_car release];
 
          [super dealloc];
}
 

        


黑马-OC语法-多态

多态: 1.对象具有多种形态,要有集成才能有多态. 2.多态会动态检测对象的真实类型 e.g. Animal(父类指针)  *a = [Dog  new];//电脑会自动检测A是属于dog类型还是An...
  • inter_work
  • inter_work
  • 2015年07月01日 22:42
  • 86

黑马-OC语法-封装

OC封装作用:提供一个方法给外界设置属性值(可以在方法里提供过滤,其实就是Set方法)                         命名规范: 1.方法名必须以set开头。 2.Set后跟上成员变...
  • inter_work
  • inter_work
  • 2015年07月01日 22:01
  • 156

黑马-OC语法-继承

继承可以能拥有父类里面所有的成员变量和方法.    好处: 1.可以避免重复代码 2.建立类之间的关系 注意点: 1.根类:NSObject 2.子类和父类不能拥有相同名称的成员变量. 3.子类可以重...
  • inter_work
  • inter_work
  • 2015年07月01日 22:31
  • 173

关于OC中的Block使用以及ARC和MAR下的内存管理方式

1.什么是Block?     Block是属于C语言框架     Block是一种数据类型(类似int)     Block是一段代码块,只有在被调用的时候被执行(类似函数和方法) ...
  • XieEXiaoZhang
  • XieEXiaoZhang
  • 2016年07月25日 15:19
  • 974

黑马程序猿_OC之内存管理

看完了OC视频里面的内存管理,之前对于内存管理
  • siqi_123
  • siqi_123
  • 2014年11月10日 01:31
  • 266

OC的手动内存管理基础(IOS开发)

OC的内存管理分为三种:          1,手动内存管理(MRC).          2,自动内存管理(ARC)          3,垃圾回收      IOS系统并不支持垃圾回收,现在主要使...
  • aa605397965
  • aa605397965
  • 2015年07月13日 23:39
  • 766

OC学习篇之---内存管理介绍和使用

在之前的一片文章我们说了OC中谓词操作:http://blog.csdn.net/jiangwei0910410003/article/details/41923507,从今天开始我们就来看一下OC中...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年12月14日 16:16
  • 9003

OC学习笔记五 内存管理(property 参数)

@property不带参数会默认生成标准的setter getter方法,不会帮助管理内存。 加上了参数才会帮忙管理内存。 基本数据类型(int float....)不需要写参数,或者也可以加上(as...
  • wangjiwei2010
  • wangjiwei2010
  • 2015年08月12日 11:25
  • 555

Swift OC 内存管理

???? 1.??????? ???????,???????????,?????????????????alloc?free,?????????????????????,????,????????...
  • JoeTongOwn
  • JoeTongOwn
  • 2016年08月02日 15:01
  • 143

黑马程序员- IOS学习笔记OC核心语法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 点语法 本质上相当于set和get方法 p.age = 10; 等价于[p set...
  • lengnuanzizhi365
  • lengnuanzizhi365
  • 2015年02月05日 23:06
  • 200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马-OC语法-内存管理
举报原因:
原因补充:

(最多只允许输入30个字)