OC-手动内存管理
一.为什么要进行内存管理
我们知道:内存分为五大区域:栈区,堆区,数据去,bss段,代码区。而最后三者是在程序启动时由操作系统进行控制的,所以不需要我们管理。栈区存储的也都是已经初始化的基本数据类型变量和函数。而我们创建的对象则分配在堆区中,是需要我们进行管理的。
四.内存管理的种类。
1.手动内存管理:M(manually)R (reference)C (couting)
2系统自动管理:A(automatic )R (reference)C (couting)
在最新的Xcode中,默认内存管理管理方式是ARC想切换成MRC需要对其进行配置,如下:
五。引用计数器的介绍
对象在创建时,内部会自动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一判断标记。release会-1,retain会+1,retain后返回的是自己self指针。
<pre name="code" class="objc">#import <Foundation/Foundation.h>
@interface person : NSObject
@end
@implementation person
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
引用计数器的常见操作
给对象发送一条retain消息, 可以使引用计数器值+1(retain方法返回对象本身)
给对象发送一条release消息, 可以使引用计数器值-1
给对象发送retainCount消息, 可以获得当前的引用计数器值(通过%ld输出查看)
需要注意的是: release并不代表销毁\回收对象, 仅仅是计数器-1
注意:我们只能通过操作对象计数器,间接控制对象的释放与否。
*/
//创建一个person 类的对象 p.
person * p = [[person alloc]init]; // 对象创建后引用计数器就会加1。 <pre name="code" class="objc" style="font-size:18px;">
[p release]; // p 被释放掉了 p = nil; //将 指针指向nil NSLog(@"%lu", [p retainCount]); //空对象调任何方法结果都是 0 // NSLog(@"Hello, World!"); } return 0;}
版权声明:本文为博主原创文章,未经博主允许不得转载。
OC-手动内存管理的更多相关文章
- iOS-旧项目中手动内存管理(MRC)转ARC
在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题, ...
- OC:内存管理、dealloc方法、copy知识点
属性的声明:使⽤@property声明属性 例如:@property NSString *name: 相当于@interface中声明了两个⽅法(setter.getter): 属性的实现:使⽤@s ...
- OC的内存管理机制
总的来说OC有三种内存管理机制,下面将分别对这三种机制做简要的概述. 1.手动引用计数(Mannul Reference Counting-MRC) mannul:用手的,手工的. 引用计数:reta ...
- object-C 手动内存管理(MRC)
object-C的内存管理和javascript的垃圾回收不一样,今天总结下手动内存管理,ARC的后边补上. 1:基本铺垫 oc采用引用计数来表示对象的状态,比如通过init创建出来的一个对象引用计数 ...
- OC的内存管理(一)
在OC中当一个APP使用的内存超过20M,则系统会向该APP发送 Memory Warning消息,收到此消息后,需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等,否则程序会 ...
- 12.Object-C--浅谈OC的内存管理机制
昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...
- 黑马程序员——OC的内存管理学习小结
内存管理在Objective-C中的重要性就像指针在C语言中的重要程序一样. 虽然作为一门高级语言,但OC却没有内存回收机制.这就需要开发者来对动态内存进行管理.OC中内存管理的范围是:任何继承了NS ...
- Objective-C 【内存管理&手动内存管理 综述】
------------------------------------------- 内存管理 (1)Objective-C的内存管理 栈区 存放局部变量(由于基本数据类型占用的存储空间是固定 ...
- IOS基础 Day-1手动内存管理
辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1 手动内存管理 主要内容:release retain必须配对好,不然会占用内存 慢慢积累导 ...
- Xcode 如何设置 自动内存管理 转换为 手动内存管理
建议使用自动内存管理 ARC. 如果不想自动内存管理,可以在build phases 下的compile sources 中找到不想自动管理的.m文件 ,给它加compiler flags 为 -fn ...
随机推荐
- NOIP2002 矩形覆盖
题四 矩形覆盖(存盘名NOIPG4) [问题描述]: 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2), ...
- vijosP1413 Valentine’s Present
vijosP1413 Valentine’s Present 链接:https://vijos.org/p/1413 [思路] 组合公式. 由题目知:每个箱子中的蛋糕要么与箱子颜色相同,要么指向一个蛋 ...
- linux shell 中"2>&1"含义
脚本是: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1, ...
- SharePoint 命令使用集锦 (持续更新中...)
首先要定位到 cd "Program Files\Common Files\Microsoft Shared\web server extensions\14\BIN" 下面 ...
- BeanPostProcessor 的使用,实现在对象初始化之前或者之后对对象进行操作
import java.lang.reflect.Field; import org.springframework.beans.BeansException; import org.springfr ...
- spring 的配置 bean>>property>>name属性
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 路由器中pppoe,动态IP,静态IP的区别
路由器中pppoe,动态IP,静态IP的区别 要把路由器设置得能上网,无非就是设置WAN外网接口连接而已.WAN接口能上网,则连接的电脑就能上网,反之则上不了网.只不过WAN接口往往有pppoe,动态 ...
- Codeforces4D - Mysterious Present(LIS)
题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]<w[j]& ...
- SRM144 - SRM 148(少144-DIV1-LV3,147-DIV2-LV3)
SRM 144 DIV 1 500pt tag:组合 题意:彩票中奖.给定n, m,从1-n中选择m个数组成数列a1, a2, a3...am.对于数列{am}分别满足以下条件的概率: (1)数列所有 ...
- js获取浏览器类型
function add(){ var userAgent = navigator.userAgent, rMsie = /(msie\s|trident.*rv:)([\w.]+)/, rFiref ...