网站套餐报价,帝国cms 调用网站名称,wordpress会员下载功能,公司logo墙设计图片iOS内存管理方式#xff1a; ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式#xff1a; 内存管理的问题#xff1a; 1、内存泄露#xff1a;不再需要的对象没有释放。 2、野指针#xff1a;正在使用的对象提前…iOS内存管理方式 ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式 内存管理的问题 1、内存泄露不再需要的对象没有释放。 2、野指针正在使用的对象提前释放。 引用计数 1、每一个对象上都有一个引用计数器 2、当对象出生时引用计数器为1 3、当对象调用retain方法时引用计数器1 4、当对象调用release方法时引用计数器-1 5、当一个对象引用计数为0时这个对象立即被回收 僵尸对象过度释放的对象。 iOS为了优化app性能不会马上处理僵尸对象如图所示可以开启僵尸模式。 dealloc 方法 当对象的retainCount0时自动调用。 dealloc里release成员变量对象。 dealloc必须调用父类方法[super dealloc]必须放在最后。 dealloc由系统自动调用不能手动调用。 dealloc的优化 self.dog nil; 内存管理原则 谁申请谁释放。 申请的方法alloc new copy mutableCopy retain 释放的方法release property修饰词补充 1、默认assign 2、assign 主要修饰基本数据类型 int long float double 不添加任何管理内存的代码 3、retain 主要修饰OC对象 添加管理内存的代码 Autorelease自动释放池 (一)基本用法 1会将对象放到一个自动释放池中 2当自动释放池被销毁时会对池子里的所有对象做一次release 3会返回对象本身 4调用完autorelease方法后对象的计数器不受影响销毁时影响 (二)好处 1不需要再关心对象释放的时间 2不需要再关心什么时候调用release (三)使用注意 (1)占用内存较大的对象不要随便使用autorelease应该使用release来精确控制 (2)占用内存较小的对象使用autorelease没有太大的影响 (四)错误写法 1连续调用多次autorelease释放池销毁时执行两次release(-1吗) 2Alloc之后调用了autorelease之后又调用了release。 (五)自动释放池 1在ios程序运行过程中会创建无数个池子这些池子都是以栈结构先进后出存在的。 2当一个对象调用autorelease时会将这个对象放到位于栈顶的释放池中 (六)自动释放池的创建方式 1ios 5.0以前的创建方式 NSAutoreleasePool *pool[[NSAutoreleasePool alloc] init]; [pool release];//[pool drain];用于mac 2Ios5.0以后 autoreleasepool {//开始代表创建自动释放池 ······· }//结束代表销毁自动释放池 (七)Autorelease注意 (1)系统自带的方法中如果不包含alloc new copy等则这些方法返回的对象都是autorelease的如[NSDate date] (2)开发中经常会写一些类方法来快速创建一个autorelease对象创建对象时不要直接使用类名而是使用self ARC内存管理机制 一ARC的判断准则 只要没有强指针指向对象对象就会被释放。 二指针分类 1强指针默认的情况下所有的指针都是强指针关键字__strong 2弱指针_ _weak关键字修饰的指针 声明一个弱指针如下 __weak Person *p; ARC中只要弱指针指向的对象不在了就直接把弱指针做清空操作。 __weak Person *p[[Person alloc] init];//不合理对象一创建出来就被释放掉对象释放掉后ARC把指针自动清零。 ARC中在property处不再使用retain,而是使用strong在dealloc中不需要再[super dealloc]。 propertynonatomic,strongDog *dog;// 意味着生成的成员变量_dog是一个强指针相当于以前的retain。 如果换成是弱指针则换成weak不需要加__。 三ARC的特点总结 1不允许调用releaseretainretainCount 2允许重写dealloc,但是不允许调用[super dealloc] 3property的参数 Strong:相当于原来的retain适用于OC对象类型成员变量是强指针 Weak:相当于原来的assign,(适用于oc对象类型)成员变量是弱指针 Assign适用于非OC对象类型基础类型 MRC环境get方法实现 //atomic下get方法 - (Keyborad *)kb { [_kb retain]; [_kb autorelease]; return _kb; } //nonatomic下get方法 - (Keyborad *)kb { return _kb; } MRC转ARC: MRC与ARC混编 ARCMRC 在的选项下下选择要不使用编译的文件双击它输入-fno-objc-arc即可 MRC工程中也可以使用ARC的类。 在的选项下下选择要使用编译的文件双击它输入即可 循环引用A对象强指针引用了B对象B对象强指针引用了A对象彼此引用无法销毁。 解决方法将其中的一条强指针改成用weak修饰的弱指针。 转载于:https://www.cnblogs.com/dxb123456/p/5487706.html