1、内存管理-黄金法则

The basic rule to apply is everything that increases the reference counter with alloc, [mutable]copy[withZone:] or retain is in charge of the corresponding [auto]release.

如果对一个对象使用了alloc、[mutable]copy、retain,那么你必须使用相应的release或者autorelease。

类型定义:

  基本类型:任何C的类型,如:int、short、char、long、struct、enum、union等属于基本类型或者结构体;

  内存管理对于C语言基本类型无效;

  任何继承与NSObject类的对象都属于OC类型。

  所有OC对象都有一个计数器,保留着当前被引用的数量。

内存管理对象:

  OC的对象:凡是继承于NSObject;

  每一个对象都有一个retainCount计数器。表示当前的被应用的计数。如果计数为0,那么就真正的释放这个对象。

alloc、retain、release函数:

  1)alloc 函数是创建对象使用,创建完成后计数器为1;只用1次。

  2)retain是对一个对象的计数器+1;可以调用多次。

  3)release是对一个对象计数器-1;减到0对象就会从内存中释放。

增加对象计数器的三种方式:

  1)当明确使用alloc方法来分配对象;

  2)当明确使用copy[WithZone:]或者mutableCopy[WithZone:]copy对象的时;

  3)当明确使用retain消息。

上述三种方法使得计数器增加,那么就需要使用[auto]release来明确释放对象,也就是递减计数器。

………………

附加代码

………………

2、retain点语法

OC内存管理正常情况要使用大量的retain和release操作;

点语言可以减少使用retain和release的操作。

编译器对于retain展开形式:

  @property (retain)Dog *dog;

  展开为:-(void) setDog:(Dog *)aDog;

      -(Dog *)dog;

  @synthesize dog = _dog;  //(retain属性)

  展开为:-(void) setDog:(Dog *)aDog{

        if(_dog != aDog){

          [_dog release];

          _dog = [aDog retain];

        }

      };

      -(Dog *)dog{

        return _dog;

      };

copy属性:copy属性是完全把对象重新拷贝一份,计数器重新设置为1,和之前拷贝的数据完全脱离关系。

OC内存管理-黄金法则的更多相关文章

  1. Object-c学习之路二(oc内存管理黄金法则1)

    今天看了看oc的内存管理,自己管理内存不能随便的release和retain 法则会出现野指针等错误.下面以人和读书的例子做练习. 1.主函数 // // main.m // MemoryManage ...

  2. 31 (OC)* 内存管理

    31 (OC)  内存管理 一:内存管理黄金法则. 如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者autorelease 二:内存管 ...

  3. OC 内存管理机制总结

    OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创 ...

  4. OC内存管理基础

    OC 内存管理基础 一. retain和release基本使用 使用注意: 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就 ...

  5. QF——OC内存管理详解

    堆的内存管理: 我们所说的内存管理,其实就是堆的内存管理.因为栈的内存会自动回收,堆的内存需要我们手动回收. 栈中一般存储的是基本数据类型变量和指向对象的指针(对象的引用),而真实的对象存储在堆中.因 ...

  6. OC内存管理-OC笔记

    内存管理细节:http://blog.sina.com.cn/s/blog_814ecfa90102vus2.html 学习目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管 ...

  7. OC内存管理总结,清晰明了!

    <span style="font-size:18px;">OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限.所以每一个APP所占的 ...

  8. iOS学习17之OC内存管理

    1.内存管理的方式 1> iOS应用程序出现Crash(闪退),90%的原因是因为内存问题. 2> 内存问题 野指针异常:访问没有所有权的内存,如果想要安全的访问,必须确保空间还在 内存泄 ...

  9. 【0 - 1】OC内存管理

    一.内存管理概述 垃圾回收机制(GC):由系统管理内存,程序员不需要管理. OC中的垃圾回收:在OC2.0版加入垃圾回收. OC与iOS:OC有垃圾回收机制,但是iOS屏蔽了这个功能.原因:iOS运行 ...

随机推荐

  1. WPF中C#代码触发鼠标点击事件

    1.如下代码; <Button x:Name="btnTest" Click="btnTest_Click"> <Button.Trigger ...

  2. [心平气和读经典]The TCP/IP Guide(002)

    The TCP/IP Guide [Page 41, 42] Goals of The TCP/IP Guide | 本书的目标 Every author who sets out to write ...

  3. concurrency基础

    Runnable 一个执行任务,没有返回值,也不能抛出受检查异常 Callable 一个执行任务有返回值,也能抛出受检查异常 Future 表示执行任务的生命周期,任务的生命周期为:创建,提交,开始, ...

  4. UVM系统验证基础知识0(Questasim搭建第一个UVM环境)

    版权声明:本文为Times_poem原创文章,转载请告知原博主.特别声明:本文在原文基础上做了简单修改以适应文中举例在questasim下的运行,敬请原博主谅解. 需求说明:UVM系统验证 内容   ...

  5. Datenbanksystem

    1.Einführung 1.1 Die Einführung des Datenbanksystem Das Begriff Daten:Sie verwendet als Beschreibung ...

  6. ORACLE 分页 java 用jdbc方式以 sys账号连接oracle数据的问题

    2,3,4,6,8   betwenen 为闭区间,前后都包括 select * from(select a.*,rownum rn from (select * from student) a ) ...

  7. react-native-image-picker在IOS上总是返回”Can’t find variable:response”的错误?

    环境: react-native: 0.41.2 react-native-image-picker: 0.26.2 xcode 8.2.1 iphone 6 根据官方教程(https://githu ...

  8. [转]OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    本文转自:http://www.cnblogs.com/bluedoctor/p/4384659.html 一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open ...

  9. SQL SERVER学习1——数据库概念

    <SQL Server实例教程>(科学出版社) 数据库的基本概念 数据是载荷信息的物理符号,是数据库中存储的基本对象. 信息可以通过手势,眼神表达,但是表达信息的最佳方式还是数据. 数据有 ...

  10. HTML5--(3)过渡+动画+颜色+文本

    一.过渡transition transition-property指定属性名称 (如width.height.background-color.内外边距) all 所有属性都将获得过渡效果(默认) ...