当前位置: 首页 > news >正文

网页设计的网网页设计的网站手表网站那个好

网页设计的网网页设计的网站,手表网站那个好,做网站用html还是php,安新网站建设OC内存管理 一、基本原理 #xff08;一#xff09;为什么要进行内存管理。 由于移动设备的内存极其有限#xff0c;所以每个APP所占的内存也是有限制的#xff0c;当app所占用的内存较多时#xff0c;系统就会发出内存警告#xff0c;这时需要回收一些不需要再继续使用的…OC内存管理 一、基本原理 一为什么要进行内存管理。 由于移动设备的内存极其有限所以每个APP所占的内存也是有限制的当app所占用的内存较多时系统就会发出内存警告这时需要回收一些不需要再继续使用的内存空间比如回收一些不再使用的对象和变量等。 管理范围任何继承NSObject的对象对其他的基本数据类型无效。 本质原因是因为对象和其他数据类型在系统中的存储空间不一样其它局部变量主要存放于栈中而对象存储于堆中当代码块结束时这个代码块中涉及的所有局部变量会被回收指向对象的指针也被回收此时对象已经没有指针指向但依然存在于内存中造成内存泄露。   二对象的基本结构 每个OC对象都有自己的引用计数器是一个整数表示对象被引用的次数即现在有多少东西在使用这个对象。对象刚被创建时默认计数器值为1当计数器的值变为0时则对象销毁。 在每个OC对象内部都专门有4个字节的存储空间来存储引用计数器。   三引用计数器的作用 判断对象要不要回收的唯一依据就是计数器是否为0若不为0则存在。   四操作 给对象发送消息进行相应的计数器操作。 Retain消息使计数器1改方法返回对象本身 Release消息使计数器-1并不代表释放对象 retainCount消息获得对象当前的引用计数器值   五 对象的销毁 当一个对象的引用计数器为0时那么它将被销毁其占用的内存被系统回收。 当对象被销毁时系统会自动向对象发送一条dealloc消息一般会重写dealloc方法在这里释放相关的资源dealloc就像是对象的“临终遗言”。一旦重写了dealloc方法就必须调用[super dealloc]并且放在代码块的最后调用不能直接调用dealloc方法。 一旦对象被回收了那么他所占据的存储空间就不再可用坚持使用会导致程序崩溃野指针错误。   二、相关概念和使用注意 野指针错误访问了一块坏的内存已经被回收的不可用的内存。 僵尸对象所占内存已经被回收的对象僵尸对象不能再被使用。打开僵尸对象检测 空指针没有指向任何东西的指针存储的东西是0,nullnil给空指针发送消息不会报错 注意不能使用[p retaion]让僵尸对象起死复生。   三、内存管理原则 一原则 只要还有人在使用某个对象那么这个对象就不会被回收 只要你想使用这个对象那么就应该让这个对象的引用计数器1 当你不想使用这个对象时应该让对象的引用计数器-1 二谁创建谁release 1如果你通过alloc,new,copy来创建了一个对象那么你就必须调用release或者autorelease方法 2不是你创建的就不用你去负责 三谁retain谁release 只要你调用了retain无论这个对象时如何生成的你都要调用release 四总结 有始有终有加就应该有减。曾经让某个对象计数器加1就应该让其在最后-1.   四、内存管理代码规范 一只要调用了alloc就必须有release(autorelease) 二Set方法的代码规范 1基本数据类型直接复制 -voidsetAge:(int)age { _ageage; } 2OC对象类型 -voidsetCar:(Car *)car { //1.先判断是不是新传进来的对象 If(car!_car) { //2 对旧对象做一次release [_car release];//若没有旧对象则没有影响 //3.对新对象做一次retain _car[car retain]; } } 三dealloc方法的代码规范 1一定要[super dealloc]而且要放到最后 2对self当前所拥有的的其他对象做一次release操作 -voiddealloc { [_car release]; [super dealloc]; } 五、property的参数 1内存管理相关参数 Retain:对对象release旧值retain新值适用于OC对象类型 Assign:直接赋值默认适用于非oc对象类型 Copy:release旧值copy新值   2是否要生成set方法若为只读属性则不生成 Readonly:只读只会生成getter的声明和实现 Readwrite:默认的同时生成setter和getter的声明和实现   3多线程管理苹果在一定程度上屏蔽了多线程操作 Nonatomic:高性能一般使用这个 Atomic:低性能   4Set和get方法的名称 修改set和get方法的名称主要用于布尔类型。因为返回布尔类型的方法名一般以is开头修改名称一般用在布尔类型中的getter。 propery(settersetAbc,getterisRich) BOOL rich; BOOL bp.isRich;// 调用   六、内存管理中的循环引用问题以及解决 案例每个人有一张身份证每张身份证对应一个人不能使用#import的方式相互包含这就形成了循环引用。 新的关键字class 类名——解决循环引用问题提高性能 class仅仅告诉编译器在进行编译的时候把后面的名字作为一个类来处理。 1class的作用声明一个类告诉编译器某个名称是一个类 2开发中引用一个类的规范 1在.h文件中使用class来声明类 2在.m文件中真正要使用到的时候使用#import来包含类中的所有东西 3两端循环引用的解决方法 一端使用retain,一端使用assign使用assign的在dealloc中也不用再release   七、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对象类型基础类型 四补充 让程序兼容ARC和非ARC部分。转变为非ARC  -fno-objc-arc  转变为ARC的 -f-objc-arc 。 ARC也需要考虑循环引用问题一端使用retain另一端使用assign。 提示字符串是特殊的对象但不需要使用release手动释放这种字符串对象默认就是autorelease的不用额外的去管内存。转载于:https://www.cnblogs.com/LifeTechnologySupporter/p/9655992.html
http://www.pierceye.com/news/139677/

相关文章:

  • 免费的html网站做柜子喜欢上哪些网站看
  • 网站没备案怎么做加速现代装修风格三室两厅效果图
  • 互助平台网站建设网上商城怎么购物
  • 百度知道山东网站建设建设网站成本预算
  • 人人做免费网站网站建站是 什么
  • 以背景做网站视频为单位网站建设实施方案
  • 简洁大气企业网站模板西安个人做网站
  • 做一个网站需要到哪里做辽宁同鑫建设网站
  • 开发网站监控推荐扬中市建设局网站
  • 手机网站根目录简述一个网站设计的主要步骤
  • 网站改版seo建议网页设计师的能力
  • 网站上线前应该备案吗温州网站建设风格
  • 网站建设书籍免费聊城市东昌府区建设路小学网站
  • 网站标题优化怎么做找人一起做素材网站
  • 如何创建个人网站模板用织梦做模板网站
  • 平台建站建设做网站一定要有营业执照吗
  • 如何把学校网站建设好天猫店铺购买
  • 网站的建设和推广企业网站建设的主要目的是
  • html5 公众号 网站开发工程公司名称
  • 公司做网站那家好网站二维码怎么制作
  • 鼓楼区建设房产和交通局网站网站全屏图片怎么做
  • 外贸订单流失严重番禺网站建设优化推广
  • 做网站送邮箱电商网站建设行情
  • f2c网站建设珠海手机网站建设费用
  • 网站建设的策划书wordpress相册代码
  • 直播网站创做上海网站制作公司哪
  • 如何承接网站建设外包昆明专业网站设计公司
  • 网站做关键词库的作用trellis wordpress
  • 建设一个网站需要哪些硬件设备关键词查询爱站网
  • 17网站一起做网店普宁个人网站备案名称填写的注意事项