OC开发之——内存管理计数器的相关操作(37)

60 篇文章 3 订阅
订阅专栏

一 什么是内存管理

  • 移动设备的内存极其有限,每个app所能占用的内存是有限制的
  • 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要使用的内存空间,比如回收一些不需要使用的对象、变量等
  • 空间管理:任何继承了NSObject的对象,对其他基本数据类型(int、char、float、double、struct、enum等)无效

理论基础

2.1 二 对象的基本结构

  • 每个OC对象都有自己的引用计数器,是一个整数,标示“对象被引用的次数”,即有多少人正在使用这个OC对象
  • 每个OC对象内部专门有4个字节的存储空间来存储引用计数器

2.2 引用计算器的作用

  • 当使用alloc,new或者copy创建一个新对象时,新对象的引用计算器默认就是1
  • 当一个对象的引用计数器值为0时,对象占用的内存就会被系统回收。换句话说,如果对象的计数器不为0,那么在整个程序运行过程,它占用的内存就不可能被回收,除非整个程序已经推出

2.3 引用计数器的操作

  • 给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)
  • 给对象发送一条release消息,可以使引用计数器值-1
  • 可以给对象发送一条retainCount消息,获取当前的引用计数器值

三 代码实现

3.1类文件(Person)

//Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
@end

//Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
    NSLog(@"Person对象被回收了");
    [super dealloc];
}
@end

3.2 main.m

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

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //Person *p=[[Person alloc]init];
        Person *p=[[Person alloc]init];
        NSUInteger c= [p retainCount];
        NSLog(@"计数器的值是:%ld",c);
        [p retain];
        [p release];
        //p.age=10;
        //p=nil;
        [p release];
        [p release];
    }  
    return 0;
}

四 开启Zombie Objects检测

  • 点击xcode项目上的名字,选择Edit Scheme

  • 打开的对话框中依次找到:run —>Diagnostics—>Memory Management—>Zombie Objects

  • 项目出现内存问题时,会显示Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

五 对象的销毁

  • 当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收
  • 当一个对象被销毁时,系统会自动向对象发送一条dealloc消息
  • 一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言
  • 一旦重写了dealloc方法,就必须调用[super dealloc],并且放在最后面调用
  • 不要直接调用dealloc方法
  • 一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序奔溃(野指针错误)
【iOS开发】—— iOS内存管理
weixin_50990189的博客
07-21 2820
iOS内存管理
OC开发之——内存管理autorelease(44)
我的博客
04-15 174
一 概述 不使用ARC,自己管理内存,可以通过@property和@retain实现代码优化,可以依然需要在main.m调用结束后,使用[对象 release]来释放内存,不然会有僵尸对象产生。通过本文autorelease的学习将解决这一问题。 二 代码示例 2.1 Person类 //Person.h #import <Foundation/Foundation.h> @inte...
OC开发之——内存管理set方法(38)
我的博客
04-11 158
一 概述 如果你有个OC对象类型的成员变量,就必须管理这个成员变量的内存 比如:类Person有个Book *_book成员变量 这个就是本文将要介绍的set方法内存管理 二 代码实例 2.1 Book类 //Book.h #import <Foundation/Foundation.h> @interface Book : NSObject { int _price; ...
OC语法6——内存管理之引用计数器(retain,release)
weixin_30810583的博客
02-21 77
OC内存管理:   一、引用计数器:   Java有垃圾回收机制(Garbage Collection,GC)。也就是说当我们创建对象后,不需要考虑回收内存的事,Java的垃圾回收机制会自动销毁该对象,回收它占用的内存。   但OC没有垃圾回收机制,需要开发者手动销毁创建的对象,收回内存。OC中没有垃圾回收机制,而是通过“引用计数器”来管理内存的。   引用计数器OC中的对象内...
OC语言——内存管理
Coder--雷潮
03-20 783
看到很多人都在内存管理和foundation框架上做足功课,我也觉得应该跟随他们的脚步。 1-内存管理 1>内存管理 内存管理对于开发iOS来说,很重要,是精髓。学会了内存管理开发的时候就可以精确分配存储空间。 管
[iOS开发]——内存管理(effectiveOC2.0阅读笔记)
weixin_51638861的博客
02-12 542
[iOS开发]——内存管理(effectiveOC2.0阅读笔记)第29条:理解引用计数属性存取方法中的内存管理自动释放池保留环要点第30条:以ARC简化引用计数使用ARC时必须遵循的方法命名规则变量的内存管理语义ARC如何清理实例变量覆盖内存管理方法要点第31条:在dealloc方法中只释放引用并接触监听要点第32条:编写“异常安全代码”时留意内存管理问题要点第33条:以弱引用避免保留环要点第34条:以“自动释放池块”降低内存峰值要点第35条:用“僵厂对象”调试内存管理问题要点第36条:不要使用retai
OC语言之学习篇——02——内存管理
y694972351的专栏
07-17 461
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
iOS——内存管理
chabuduoxs的博客
02-13 1641
要想用OC写出内存使用效率高而且又没有 bug 的代码,就得掌握其内存管理模型的种种细节。
一旦理解了这些规则,你就会发现,其实 Objective-C 的内存管理没那么复杂,而且有了"自动引用计数"(Automatic Reference Counting,ARC)之后,就变得更为简单了。ARC 几乎把所有内存管理事宜都交由编译器来决定,开发者只需专注于业务逻辑。 一 理解引用计数 OC语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或者递减的计数器。如果想使某个对象继续存活,那就增加其引用计
黑马程序员——OC语言——内存管理
yanglipeng1993的博客
11-24 282
------- android培训、iOS培训、java培训、期待与您交流!----------
OC(完整)内存管理文档(中文)
07-20
### OC(完整)内存管理文档知识点总结 #### 一、对象的所有权与处理 ##### 1.1 对象所有权原则 - **对象所有权概念**:任何对象都可以有多个所有者,只要至少有一个所有者存在,该对象就会持续存在。若没有所有者...
iOS —— 简述OC内存管理机制
ci915194561的专栏
12-03 3565
关于OC内存管理有很多模糊的地方,下面我们一一说起 首先概念性问题 概念 为什么进行内存管理 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。 内存管理类型: OC 类型 基本类型和C语言的类型:如: int,short
黑马程序员——OC内存管理——MRC
timehzy的博客
08-20 1052
OC内存管理——MRC一、基本概念1. 为什么要进行内存管理?由于对象存储在内存的堆中,而除了对象之外的其他局部变量存储在栈中,当当前代码块结束时,系统会自动回收存储在栈中的数据,指向对象的指针也会被自动回收。此时没有指针指向对象,而对象依然存在在内存中,会造成内存泄漏。如上图所示,在OC中所要管理的内存,就是存储在堆区的对象实例。2. OC提供的三种内存管理方式: Mannual Referen
OC开发之——xcode新建项目(22)
我的博客
04-05 2191
一 概述 之前OC项目使用的都是命令行方式创建和编译,链接,运行项目 本文介绍使用IDE工具 xcode,创建项目,新建类文件及运行项目 二 xcode创建项目 依次点击:Xcode——>File——>New——>Project,打开项目创建窗口 在项目创建窗口,选择macOS标签下的Command Line Tool 在项目创建时的选项上选择或填入相应的内...
OC开发之——OC简介(1)
我的博客
03-22 1325
OC简介 C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码,甚至是C++代码 可以使用OC开发Mac OS平台和IOS平台的应用程序 二 OC语法预览 2.1 关键字 基本上所有关键字都是以“@”开头 下面是一些常见的关键字 复制 1 2 3 4 5 6 7 @inter...
OC开发之——重命名项目名(50)
我的博客
04-18 980
一 概述 本文介绍xcode如何修改项目名称 二 名称修改过程 2.1 修改前 如图所示:为项目修改前的名字(renameBefore) 2.2 修改过程 在项目名称上点击回车键,重新命名为renameAfter 命名后再按回车键确认 同理,修改文件夹的名字 同理,点击运行图标右侧的Manager Schemes,重新命名 ...
OC开发之——xcode新版本如何设置ARC(36)
我的博客
04-11 612
一 概述 在刚刚开始学习OC开发时,最好不要开启ARC(Automatic Reference Counting),这样有助于学习内存管理,但是对于刚刚接触xcode的朋友可能会发现,当你使用最新版本的xcode时,敲入release,retain,retainCount时,没有了代码提示,且运行时会报错。这是因为系统默认使用了自动内存管理,下面介绍如何设置这个ARC(Automatic Refe...
OC开发之——OC对象与函数参数(8)
我的博客
03-31 556
一 概述 学过其他编程语言的人可能对“按值传递”与“按址传递”有所了解 按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值 按地址传递:在调用函数的时候将原函数的值所在的地址拷贝一份过去,被调用函数对这个地址所作的修改会影响原来的值。 二 示例(OC语言) 复制 1 2 3 4 5 6 7 8 9 10 11 12 13...
OC开发之——xcode常用功能(23)
我的博客
04-05 531
一 概述 上一篇介绍了使用xcode开发object-c,本文继续介绍xcode的一些常用功能,如: 界面布局及快速调整 OC代码调试 添加pragma mark标记 代码编写提示 二 OC界面布局及快速调整 使用xcode打开项目后的布局如下图 1.左侧按钮:hide or show the navigator(显示或隐藏导航条——控制左侧部分) 2.中间按钮:hide or show...
OC内存管理深度解析:手动与自动引用计数详解
- 对象之间通过赋值操作传递引用时,需要注意内存管理。如`ClassA *obj2 = obj1;`,此时`obj2`和`obj1`共享同一个引用计数。删除`obj1`的引用可能会影响`obj2`,因此必须同时`release`或`autorelease`。 - 当`...
写文章

热门文章

  • VS code安装和使用技巧 117332
  • Android开发之——依赖冲突Program type already present 96889
  • C++中std是什么意思? 55996
  • Android开发之——开发中的错误及解决办法 34361
  • 下载工具IDM之——无法下载此受保护的数据其他解决方案 33738

分类专栏

  • NAS 7篇
  • OpenCV 12篇
  • Android 51篇
  • Angular 4篇
  • Bootstrap 2篇
  • IOS 206篇
  • Leonardo 7篇
  • 微信小程序 99篇
  • Vue 15篇
  • Windows 11篇
  • Flutter 122篇
  • 维修 3篇
  • Vue2 39篇
  • JavaEE 23篇
  • Jetpack Compose 9篇
  • Kotlin 22篇
  • C++ 41篇
  • 青岛大学数据结构与算法 8篇
  • WebRTC 2篇
  • FFMPEG 3篇
  • P5.js 28篇
  • Hexo 26篇
  • 数据结构与算法基础 8篇
  • Umi 1篇
  • Electron 1篇
  • OC 60篇
  • HarmonyOS 30篇
  • 前端 2篇
  • 生活 1篇
  • 接口API 4篇
  • Java 2篇
  • Dart 13篇
  • Excel 1篇
  • Mac 14篇
  • Linux 9篇
  • Jenkins 3篇
  • WordPress 1篇
  • PHP 2篇
  • Hugo 1篇
  • C# 149篇
  • 日语 10篇
  • React Native 39篇
  • Rxjava 3篇
  • 移动支付 4篇
  • Ubuntu 1篇
  • 韩语 12篇
  • C 1篇
  • HTTP 2篇
  • Object-C 1篇
  • Gradle 1篇
  • Swift 1篇
  • Centos 8篇
  • 俄语 1篇
  • JSP 1篇
  • Axure 1篇
  • Python
  • Node 1篇
  • cmake 8篇
  • 安全 6篇
  • React-Native 17篇
  • 数据库 2篇
  • 版本控制 17篇
  • 工具 19篇
  • C++ 47篇
  • 面试题 3篇
  • 网站 4篇
  • 规范 2篇
  • 职业规划 3篇
  • 第三方集成
  • 运维 2篇
  • 产品
  • 技术文档 75篇
  • 硬件开发 11篇
  • 外语学习
  • 后端 1篇

最新评论

  • 微信小程序开发之——录音播放及文件上传下载-示例(2)

    小脑斧: 务必使用真机测试录音,开发工具有坑

  • Hexo博客开发之——Gitalk

    饿了就去喝水: 有用有用

  • 鸿蒙OS应用开发之——This device type does not match the module profile

    兮君: 请问大佬 POS机这种应该算作哪一类呢?

  • Cmake入门之——No CMAKE_C_COMPILER could be found(二)

    刚猿媛: 之前vs没进行升级前,cmake是可以成功的,近期vs升级后,发现cmake报类似的错误,尝试了很多方法,最后将vs版本回滚,cmake问题才得以解决

  • 微信小程序开发之——map组件

    Jackmat: 效果图咋没了

大家在看

  • 店群合一模式下的社区团购新发展——结合链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序源码 881
  • 国内自闭症学校大揭秘!了解治疗自闭症的最佳选择 127
  • 【开题报告】基于django+vue旅游景点预约系统(论文+源码) 计算机毕业设计 1044
  • Spark MLlib实践指南:从大数据推荐系统到客户流失预测的全流程建模
  • 除了 Whisper 模型,还有哪些语音识别模型在口音识别方面表现优秀? 1016

最新文章

  • Bootstrap开发之——Bootstrap安装及使用(02)
  • Bootstrap开发之——Bootstrap简介(01)
  • Angular开发之——Angular打包部署项目(04)
2023年37篇
2022年238篇
2021年300篇
2020年376篇
2019年50篇
2018年147篇
2017年103篇
2016年18篇
2015年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司个人如何做网站优化服务莱芜网站优化是什么揭阳网站关键词优化去找哪家江门网站优化快照宣城百度seo网站优化多少钱石家庄卫浴行业网站优化推广价格网站优化实训内容优化网站方法82金手指霸屏永嘉县网站seo优化排名酒店网站seo优化济南瓷砖行业网站优化推广怎么样网站seo优化关键词廊坊网站优化霸屏东莞网站建设优化技术百度快照和网站优化有什么区别辽宁传统行业网站优化有什么方法海淀优化网站郑州网站优化哪家好南京专业的网站推广优化广东教育网站优化单页网站seo优化热门网站排名优化北仑网站优化软件贵阳品牌seo怎样优化网站网站优化需要掌握哪些基础知识漯河玖讯网站优化中山高端网站优化网站cms管理与优化优化网站慧择火29星洛阳企业网站seo优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化