黑马-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];
}
 

        


黑马程序员 7 oc核心语法与内存管理初探

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
  • kakamuz
  • kakamuz
  • 2014年11月24日 01:30
  • 224

OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换

一:集合的内存管理 二:ARC机制下的内存管理 三:集合之间的相互转换

OC属性,点语法,内存管理小结

一,retain, copy, assign区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。...

OC初级基础语法与内存管理MRC

Objective-c初级复习 • C语言回顾 一.数据类型 名称 占位符 字节数 int 整数类型 %i/%d 4 floa...

OC基础语法(六)---内存管理(二)

一、ARC 简介:ARC是自ios 5 之后增加的新特性,完全消除了手动管理内存的繁琐,编译器会自动在适当的地方插入retain、release、autorelease语句。你完全不需要担心内存,因...

【OC语法快览】四、基础内存管理

Basic Memory Management 基础内存管理 If you're writing an application for Mac OS X, you have the opti...
  • gogler
  • gogler
  • 2014年07月04日 17:58
  • 756

iOS开发之OC语法基础(四)--内存管理

一、课程目标: 1、掌握内存管理的原则 2、深入理解属性的内存管理 3、掌握便利构造器内存管理 4、掌握NSAutoreleasePool(自动释放池)的使用 二、如何管理内存? 1、解决办法: 有...

OC_语法入门_day5_内存管理_计数器/set方法/property的参数/循环引用/自动释放池

H:/Objective-C/OC_day5/00-01-改错题.m1.description #import @interface Person : NSObject @property int ...

OC基础语法(五)---内存管理

一、基本原理      什么是内存管理:      移动设备的内存极其有限,每个app所能占用的内存是有限制的;      当app所占用的内存较多时,系统会发出警告,这时得回收一些不需要再使用的内存...

oc内存管理中retain属性对应的setter实际语法代码实现及原理

使用@property配合@synthesize可以让编译器自动实现getter/setter方法,使用的时候也很方便,可以直接使用“对象.属性”的方法调用。而其中的assign,copy和retai...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马-OC语法-内存管理
举报原因:
原因补充:

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