一,堆与栈

1,栈区,stack: 后进先出,由编译器自动分配并释放,一般存放函数的参数值、局部变量

2,堆区,heap:先进先出,由程序员分配和释放

3,全局区,静态区:程序结束后由系统释放,

4,寄存区:保存栈顶指针和指令指针

5,文字常量区

6,程序代码区,存放函数的二进制代码

链表:头指针head,

栈区:main中有i和j变量    i 地址比 j 地址 大

栈区大小为1M

堆:(系统内存和虚拟内存)

  1,所有应用程序共享

  2,所有堆中的内存分配,都是操作系统负责的

  3,操作系统使用链表来维护所有已经分配的内存

  4,堆中的内存释放,程序通知系统释放内存。引用计数为0,会被立即释放

  5,堆中的所有空间,都是“匿名”访问的,所有匿名访问都是通过指针来访问

在OC中没有垃圾回收机制

NULL表示地址为0

nil 是地址指向NULL的空对象

nil可以调用任何方法不会报错

copy:建立一个副本,互不干扰

可变不可变 是 针对 Foundation 框架的数据类型

对于自定义类 copy就是可变

arrayM  M就是可变的意思

可变copy为可变或不可变 地址都会变

不可变copy为不可变(浅复制) 地址不变

NSMutableArray *arrayM = [NSMutableArray arrayWithObjects:@(), @(), nil];
NSLog(@"%@ %p %@", arrayM, arrayM, arrayM.class); //1,可变 =》 可变
NSMutableArray *aM = [arrayM mutableCopy];
NSLog(@"%@ %p %@", aM, aM, aM.class);
//2,可变 =》 不可变
NSArray *a = [arrayM copy];
NSLog(@"%@ %p %@", a, a, ,a.class);

OC-copy的更多相关文章

  1. OC copy mutableCopy, 浅拷贝,深拷贝

    copy与mutableCopy都是深拷贝,区别是mutableCopy拷贝出的对象是可变的. OC对象基本都是通过指针访问,所以一般情况下,通过对指针的赋值都是浅拷贝,即只是拷贝了一份对象的指针,对 ...

  2. OC Copy基本使用(深拷贝和浅拷贝)

     首先,什么是copy? Copy的字面意思是“复制”.“拷贝”,是一个产生副本的过程. 常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件. 特点:1.修改源文件的内容,不会影响副本文件: ...

  3. iOS - OC Copy 拷贝

    前言 copy:需要先实现 NSCopying 协议,创建的是不可变副本. mutableCopy:需要实现 NSMutableCopying 协议,创建的是可变副本. 浅拷贝:指针拷贝,源对象和副本 ...

  4. OC Copy and MutableCopy的使用

    #import <Foundation/Foundation.h> @interface Student : NSObject <NSCopying> // copy代表set ...

  5. OC Copy自定义类

  6. OC Copy和Property

  7. OC Copy和内存管理

  8. HEC-ResSim原文档

              HEC-ResSim Reservoir System Simulation             User's Manual       Version 3.1 May 201 ...

  9. OC中copy的使用

    @property内存管理策略的选择 1.非ARC 1> copy : 只用于NSString\block: 2> retain : 除NSString\block以外的OC对象: 3&g ...

  10. 详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy

    读前小提示:对于深浅复制有一个清楚的了解,对于学习oc的朋友来说,至关重要.那么首先,我们要明白深浅复制是如何定义的呢.这里为了便于朋友们理解,定义如下. 浅 复 制:在复制操作时,对于被复制的对象的 ...

随机推荐

  1. win10 google浏览器设置

    在浏览器地址栏中输入命令: chrome://flags/ 撤销:chrome设置了禁止此页弹出提示框 chrome://settings/contentExceptions#popups

  2. 终于有SpringMvc与Struts2的对比啦

    目前企业中使用SpringMvc的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题,下面我们就来对SpringMvc和Struts2进行各方面的比较: 1. 核 心控 ...

  3. [转]关于网络通信,byte[]和String的转换问题

    最近的项目中要使用到把byte[]类型转换成String字符串然后通过网络发送,但发现发现出去的字符串和获取的字符串虽然是一样的,但当用String的getBytes()的方法得到的byte[]跟原来 ...

  4. GraphX 的属性图

    package main.scala import org.apache.spark.graphx.{Edge, Graph, VertexId} import org.apache.spark.rd ...

  5. 【POJ-2482】Stars in your window 线段树 + 扫描线

    Stars in Your Window Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11706   Accepted:  ...

  6. 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 726  Solved: 309[Submit][Status ...

  7. 数论专项测试——约数个数和(lucas的数论)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  8. SQLServer2012自增列值跳跃的问题

    2012引入的新特性,重启之后会出现值跳跃的问题,如: 解决的方案: 1.使用序列(Sequence),2012引入的和Oracle一样的特性. 2.更改SQLServer启动服务的启动参数,增加[- ...

  9. bc#29 做题笔记

    昨天的bc被坑惨了= = 本来能涨rating的大好机会又浪费了...大号已弃号 A:第一反应是高精度,结果模板找不到了= =,然后现学现卖拍了个java的BigInteger+快速幂,调了好半天不说 ...

  10. Android数据库更新——上万条数据的插入

    在实际情况下,很可能遇到会向一个表中插入10万条数据,而这样的数据库更新,如果用寻常的方式,在SQLiteOpenHelper.onUpdate()方法中不断的执行SQL语句,那么效率是可想而知的,甚 ...