OC10_数组的内存管理

//
//  main.m
//  OC10_数组的内存管理
//
//  Created by zhangxueming on 15/6/18.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Dog *dog1 = [[Dog alloc] init];
        Dog *dog2 = [[Dog alloc] init];
        Dog *dog3 = [[Dog alloc] init];
        Dog *dog4 = [[Dog alloc] init];
        Dog *dog5 = [[Dog alloc] init];
        //往数组中添加对象, 对应对象的retainCount 值+1;
        NSLog(@"dog1 retainCount = %li", dog1.retainCount);
        NSMutableArray *dogs = [[NSMutableArray alloc] init];
        [dogs addObject:dog1];//dogs[0]-->dog1
        [dogs addObject:dog1];//dogs[1]-->dog1
        NSLog(@"dog1 retainCount = %li", dog1.retainCount);
        [dogs addObject:dog2];//dogs[2]-->dog2
        [dogs addObject:dog3];
        [dogs addObject:dog4];
        [dogs addObject:dog5];

        [dog1 release];
        [dog2 release];
        [dog3 release];
        [dog4 release];
        [dog5 release];

        NSLog(@"dog1 retainCount = %li", dog1.retainCount);

        //数组对象release 实际上是对数组中的每个一个元素 release 一次
        [dogs release];

        //NSLog(@"dog1 retainCount = %li", dog1.retainCount);

    }
    return 0;
}
时间: 2024-08-01 10:32:11

OC10_数组的内存管理的相关文章

指针和数组及内存管理

1. 指针和地址 TCPL 中给指针的定义是: A pointer is a group of cells (often two or four) that can hold an address . int value = 10; int *pvalue = &value; 上面这个语句的内存模型是: 注意: &(取地址)操作符只对内存中存在的对象起作用,如变量和数组类型.不能对表达式,常量和寄存器变量使用取地址操作. *(析取)操作符应用于一个指针变量时,取得这个指针变量所指向的对象.

java 数组及数组得内存管理总结

一:一维数组的声明及初始化 数组变量属于引用类型,他的元素可以是引用类型,也可以是基本类型. int[] a=new int[3]; a[0]=1; a[1]=2; a[2]=3; int[] b={1,2,3}; int c[]={1,2,3}; // int d[5]; 错误表达方式 a的内存图: b与c引用的内存图与a一样.b与c引用只是a引用得简写. 1 public class Test1 { 2 3 public static void main(String[] args) { 4

数组及其内存管理 笔记

在使用java数组之前必须先对数组对象进行初始化,当数组所有元素都被分配了合适的内存空间,并指定了初始值时,数组初始化完成,即数组元素的内存空间非配结束,程序以后将不能重新改变数组对象在内存中的位置和大小. java数组是静态的,即当数组初始化之后,该数组所占的内存空间,数组长度都是不可变的.数组必须经过初始化才能使用. 所谓初始化,即创建实际的数组对象,也就是在内存中数组对象分配内存空间,并为每个数组元素指定初始值. 有时候将引用变量赋值可以制造数组在使用前看似并没有初始化的假象,只要牢记 数

OC_内存管理:MRC与ARC

内存管理 1.1内存管理 1.1.1 C的内存管理,以及麻烦之处 char *p = (char *)malloc(100*sizeof (char)); 这是C的动态内存分配,我们手动跟系统申请了100个字节的内存:或者说系统在堆里开辟了100个字节的空间,并将这个空间的首地址返回给指针变量p. free(p); 使用完成后,手动跟系统释放内存空间:或者说系统回收空间. 如上就是C里简单的内存管理. C的内存管理,我们手动申请,手动释放.这样来看,我们只需要注意三个问题就好了: 1,申请内存,

iOS开发-内存管理

内存管理 对于这篇呢,其实现在都是ARC模式,正常状态下基本不用我们去手动释放内存,所以如果不是要面试呀.装逼或者扎实功底的,就先别看了或者了解下即可,因为像面试时,有些面试官想看你的基础时,就有些人会问,现在工作基本不会用到. 学习目标 1. 掌握内存管理的原理 2. 掌握手动内存管理 =============================================== 1.需要理解的知识 1.1内存管理 1.1.1 C的内存管理,以及麻烦之处 char *p = (char *)m

OC语言--内存管理

1.内存管理原理的介绍 1.1C的内存管理 char *p = (char *)malloc(100*sizeof (char)); 这是C的动态内存分配,我们手动跟系统申请了100个字节的内存:或者说系统在堆里开辟了100个字节的空间,并将这个空间的首地址返回给指针变量p. strcpy(p,"Hello World!"); 将字符串拷贝给指针变量p指向的内存空间. puts(p); 将p指针指向的内存空间里的字符串打印出来. free(p); 使用完成后,手动跟系统释放内存空间:或

iOS开发之oc(十一)--内存管理MRC

掌握内容 >理解内存管理的原理 >掌握手动内存管理MRC >掌握内存管理在实际工程中的使用 (一) 1.理解部分 1.1内存管理 (传统内存管理demo) 1.1.1内存管理做了一件什么事? 内存管理就是确保开辟的堆空间得到正确的释放 如果堆空间没有释放,称为内存泄露 使用已释放的堆空间,称为提前释放 重复释放同一个空间,称为重复释放 1.1.2传统内存管理的困境 (1)当我们要释放一个堆,首先要确定使用这个堆的指针,都访问完毕,避免提前释放. (2)释放指针指向的堆空间,首先要确定那些

OC基础 内存管理

OC基础  内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free(p); c语言内存管理存在的缺陷: (1)不释放就会造成内存泄露. (2)多次释放就会造成崩溃. (3)大型项目中多人对一块内存进行操作时,不能释放内存,因为不知道别人是否还在使用. oc语言的内存管理 1.内存管理 (1)引用计数. (2)内存管理的黄金法则:谁创建谁释放. 让我们来看一下测试例

objective-c内存管理模块

objective-c可以全自动的实现程序的内存管理,主要是依赖于objective-c中引用计数的管理机制 首先: 内存管理的准则是:如果对一个对象使用了A类. alloc,[mutable]copy[withZone],retaion那么你必须使用相应的B类.release 或者 autorelease 解释:即每次程序中使用了A类的关键字,就需要对应使用B类的关键字释放对象内存. 1.数组的内存管理 一个对象声明,该对象的retainCount = 1;当将该对象添加到一个可变数组中的时候