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

电商总监带你做网站策划工程公司安全考试

电商总监带你做网站策划,工程公司安全考试,惠州网站建设领头羊,如何快速开发手机app一#xff0c;ARC的概念 ARC (Automatic Reference Counting#xff0c;自动引用计数) 是苹果公司在其编程语言#xff08;如 Objective-C 和 Swift#xff09;中的内存管理机制。ARC 通过编译器插入的代码自动管理对象的内存生命周期#xff0c;减少了手动内存管理的复杂…一ARC的概念 ARC (Automatic Reference Counting自动引用计数) 是苹果公司在其编程语言如 Objective-C 和 Swift中的内存管理机制。ARC 通过编译器插入的代码自动管理对象的内存生命周期减少了手动内存管理的复杂性和错误。 以下是 ARC 在编译期和运行期所做的工作 二编译期 1.插入引用计数操作 编译器会在适当的位置插入retain和release操作retain用于增加对象的引用计数release用于减少对象的引用计数。编译器通过静态分析代码确定在何处增加或减少对象的引用计数 // 示例代码 MyClass *obj [[MyClass alloc] init]; // 引用计数为1 obj nil; // 引用计数为0触发dealloc释放内存上面的代码ARC会在编译时插入一下操作 MyClass *obj [[MyClass alloc] init]; [obj retain]; // 增加引用计数 [obj release]; // 减少引用计数当obj被赋值为null时2优化引用计数操作 编译器会尝试优化引用计数的操作合并或消除不必要的retain和release调用例如编译器会合并多个相邻的retain和release操作减少性能开销 MyClass *obj1 [[MyClass alloc] init]; MyClass *obj2 obj1;在这种情况下编译器知道ob2是obj1的别名不需要增加引用计数 3插入autorelease池管理 对于某些方法如工厂方法返回的对象编译器会插入autorelease调用使对象在适当的时机释放。 (instancetype)myObject {return [[[self alloc] init] autorelease]; }这里达到了延迟释放对象的效果autorelease把对象添加到当前的auto release池中使得对象在某个时刻通常是当前事件循环结束时自动释放而不是立即释放。这种机制允许开发者创建的对象在返回调用者后依旧有效不会立即释放。 4生成dealloc方法 编译器会生成或补充类中的dealloc方法来释放实例变量或资源 - (void)dealloc {[_name release];[super dealloc]; }5内存管理规则检查 在编译期ARC 会对代码进行检查确保遵循内存管理规则。例如编译器会检查对象的所有权转移是否正确并发出警告或错误信息。 三运行期 在运行期ARC会根据编译器插入的代码来管理对象的生命周期。 1管理引用计数 引用计数通过retain和release操作来管理。每当对象的引用计数变为零时dealloc方法会被调用释放对象的内存。 MyClass *obj [[MyClass alloc] init]; // retainCount 1 [obj retain]; // retainCount 2 [obj release]; // retainCount 1 [obj release]; // retainCount 0, dealloc is called2处理autorelease池 每当一个对象呗autorelease时他会被添加到当的auto release池中池会在每个循环事件末尾被清空从而释放池中的对象 autoreleasepool {MyClass *obj [[[MyClass alloc] init] autorelease];// obj will be released at the end of the autorelease pool block }3解决循环引用 使用weak来打破循环引用。弱引用不会增加对象的引用计数当对象被释放时弱应用会被自动值为nil. interface MyClass : NSObject property (nonatomic, weak) id delegate; end4,动态内存管理 ARC 运行期的内存管理是动态的即在程序运行时根据实际情况管理对象的内存分配和释放 总结 对于ARC 。编译器在代码里适当的地方自动插入 retain / release 完成内存管理引用计数。但ARC相对于MRC又不是在编译时添加retain/release/autorelease这么简单。应该是编译期和运行期两部分共同帮助开发者管理内存。在编译期ARC用的是更低层C接口实现的retain/release/autorelease并不通过OC的消息转发机制而是直接调用其底层C语言版本API这样做的性能更好因为保留及释放操作需要频繁的执行直接调用其底层的函数能节省很多CPU周期。ARC管理对象生命期的办法是在合适的地方插入“保留”及“释放”操作。在方法中创建的对象在方法中自动插入release类中的对象在dealloc方法中释放。通过retaincount的机制来决定对象是否需要被释放。每次runloop时都会检查对象的retainCount如果retaincount 0时说明该对象没有地方要继续使用了可以释放掉了。 补充 对于__unsafe_unretained修饰符__unsafe_unretained 和 __weak 相似是一种弱引用关系。区别在于如果一个对象没有强指针引用则 __unsafe_unretained 引用不会被置为 nil而是会变成一个野指针。 那有了 __weak为什么还有 __unsafe_unretained 呢 __unsafe_unretained 主要是跟 C 语言代码相互。此外__weak 会消耗一定的性能使用 __weak 需要检查对象是否被释放在追踪是否被释放的时候需要追踪一些信息则使用 __unsafe_unretained 比 __weak 快消耗 CPU 资源也比 __weak 少。 而且一个对象有大量的 __weak 引用对象的时候当对象被释放那么此时就要遍历 weak 表把表里所有的指针置空消耗 CPU 资源。 综上所述当明确知道对象的生命期时选择 __unsafe_unretained 会有一些性能提升。但是 __unsafe_unretained 也容易引发野指针问题。 自动释放池 1自动释放池底层怎么实现 内存里面有栈栈里面有自动释放池。自动释放池以栈的形式实现当你创建一个新的自动释放池时它将被添加到栈顶。当一个对象收到发送autorelease消息时,它被添加到当前线程的处于栈顶的自动释放池中当自动释放池被回收时它们从栈中被删除并且会给池子里面所有的对象都会做一次release操作。 在iOS程序运行过程中会创建无数个池子。这些池子都是以栈结构存在先进后出 2自动释放池作用 将对象与自动释放池建立关系池子内调用 autorelease 方法在自动释放池销毁时销毁对象延迟 release 销毁时间 3苹果是如何实现 autoreleasepool 的 autoreleasepool 以一个队列数组的形式实现主要通过下列三个函数形成 objc_autoreleasepoolPush、objc_autoreleasepoolPop、objc_autorelease。 前两个函数执行 autorelease 的 push 和 pop 操作销毁对象执行 release 操作。
http://www.hkea.cn/news/14453826/

相关文章:

  • 怎么建设好一个外贸购物网站网站接入查询
  • 网站建设保密协议书高级搜索引擎技巧
  • 丹阳市住房建设管理局网站上海豪宅装修公司排名
  • 百度里面的站长工具怎么取消网站建设ppt方案结语
  • 广州市公司网站建设平台网络设计软件有哪些
  • 佛冈网站建设怎么做私人网站
  • 手机网站 案例wordpress爱情主题
  • 电脑版传奇网站医疗网站建设哪个好用
  • 高中网站制作网络营销方案设计
  • 为什么网站开发需要写php中国建设银行官网个人登录
  • 湖北网站建设推荐网站源代码购买
  • 郑州网站优化渠道网站商品展示页怎么做的
  • 百度联盟怎么做网站医学类app制作公司
  • 企业网站建设的三个核心问题typecodes wordpress
  • 吉林省网站建设行业需求分析公司网站建设汇报
  • 杭州认证网站建设网站描述设置
  • 网站信息可以边建设边组织wordpress 字体 插件下载
  • 做3ds磁铁卡网站wordpress腾讯地图插件
  • wordpress搭建外贸网站广东省建设厅的注册中心网站
  • 双语企业网站源码电影网站模板下载
  • 网站优化推广是什么wordpress背景图案轮流
  • 昆明免费网站建设软件研发和开发哪个工资高
  • 电商网站开发用什么语言表达室内设计师常用网站
  • 音乐网站的制作宁波建设网 公积金网点
  • 南京 网站开发做我女朋友的网站
  • 图书馆门户网站建设总结想自己做个公司网站不知道怎么做
  • 贵州省住房和城乡建设厅网站东京购物
  • 做网站哪里好做金融网站需要什么营业执照
  • 建设单位网站经费请示北京建设网网站
  • 免费营销软件网站长沙品牌设计公司排行榜