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

带后台的手机网站源码/seo谷歌外贸推广

带后台的手机网站源码,seo谷歌外贸推广,武汉城市建设学院网站,做美容行业的网站哪个好autorelease基本使用autorelease注意事项autorelease基本使用 本小节知识点: 【理解】autorelease基本概念【理解】自动释放池3. 【理解】autorelease基本使用 1.autorelease基本概念 autorelease是一种支持引用计数的内存管理方式,只要给对象发送一条autorelease消息,会将对象…
  • autorelease基本使用
  • autorelease注意事项

autorelease基本使用

本小节知识点:

  1. 【理解】autorelease基本概念
  2. 【理解】自动释放池

3. 【理解】autorelease基本使用

1.autorelease基本概念

  • autorelease是一种支持引用计数的内存管理方式,只要给对象发送一条autorelease消息,会将对象放到一个自动释放池中,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作

    • > 注意,这里只是发送release消息,如果当时的引用计数(reference-counted)依然不为0,则该对象依然不会被释放。
  • autorelease方法会返回对象本身

Person *p = [Person new];
p = [p autorelease];
  • 调用完autorelease方法后,对象的计数器不变
Person *p = [Person new];
p = [p autorelease];
NSLog(@"count = %lu", [p retainCount]); // 1
  • autorelease的好处

    • 不用再关心对象释放的时间
    • 不用再关心什么时候调用release
  • autorelease的原理

    • autorelease实际上只是把对release的调用延迟了,对于每一个autorelease,系统只是把该 Object放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。

2.自动释放池

  • 创建自动释放池格式:
  • iOS 5.0前
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // 创建自动释放池
[pool release]; // [pool drain]; 销毁自动释放池
  • iOS 5.0 开始
@autoreleasepool
{ //开始代表创建自动释放池} //结束代表销毁自动释放池
  • 在iOS程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)

  • 当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池


3.autorelease基本使用

NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init];Person *p = [[[Person alloc] init] autorelease];[autoreleasePool drain];
@autoreleasepool
{ // 创建一个自动释放池Person *p = [[Person new] autorelease];
} // 销毁自动释放池(会给池子中所有对象发送一条release消息)

 

autorelease注意事项

本小节知识点:

  1. 【掌握】autorelease使用注意
  2. 【理解】autorelease错误用法

1.autorelease使用注意

  • 并不是放到自动释放池代码中,都会自动加入到自动释放池
 @autoreleasepool {// 因为没有调用 autorelease 方法,所以对象没有加入到自动释放池Person *p = [[Person alloc] init];[p run];
}
  • 在自动释放池的外部发送autorelease 不会被加入到自动释放池中
    • autorelease是一个方法,只有在自动释 放池中调用才有效。
 @autoreleasepool {}// 没有与之对应的自动释放池, 只有在自动释放池中调用autorelease才会放到释放池Person *p = [[[Person alloc] init] autorelease];[p run];// 正确写法@autoreleasepool {Person *p = [[[Person alloc] init] autorelease];}// 正确写法Person *p = [[Person alloc] init];@autoreleasepool {[p autorelease];}
  • 自动释放池的嵌套使用

    • 自动释放池是以栈的形式存在
    • 由于栈只有一个入口, 所以调用autorelease会将对象放到栈顶的自动释放池
    • >栈顶就是离调用autorelease方法最近的自动释放池 objc @autoreleasepool { // 栈底自动释放池 @autoreleasepool { @autoreleasepool { // 栈顶自动释放池 Person *p = [[[Person alloc] init] autorelease]; } Person *p = [[[Person alloc] init] autorelease]; } }
  • 自动释放池中不适宜放占用内存比较大的对象

    • 尽量避免对大内存使用该方法,对于这种延迟释放机制,还是尽量少用
    • 不要把大量循环操作放到同一个 @autoreleasepool 之间,这样会造成内存峰值的上升
// 内存暴涨@autoreleasepool {for (int i = 0; i < 99999; ++i) {Person *p = [[[Person alloc] init] autorelease];}}
// 内存不会暴涨for (int i = 0; i < 99999; ++i) {@autoreleasepool {Person *p = [[[Person alloc] init] autorelease];}}

2.autorelease错误用法

  • 不要连续调用autorelease
 @autoreleasepool {// 错误写法, 过度释放Person *p = [[[[Person alloc] init] autorelease] autorelease];}
  • 调用autorelease后又调用release
 @autoreleasepool {Person *p = [[[Person alloc] init] autorelease];[p release]; // 错误写法, 过度释放}

转载于:https://www.cnblogs.com/zhoudaquan/p/5017148.html

http://www.jmfq.cn/news/4806541.html

相关文章:

  • 做网站游戏怎么挣钱/抖音推广引流
  • 0731网站/怎么优化推广自己的网站
  • 网站入侵怎么做/广州seo顾问seocnm
  • 本地网站怎么做/百度云网盘网页版
  • web前端怎么做网站响应式设计/百度权重批量查询
  • 陕西高端品牌网站建设/黄页网站推广
  • 网站建设市场占有率/关于网络推广的方法
  • 如何做视频网站流程/人力资源管理师
  • 郴州网站制作公司招聘/个人在线网站推广
  • 高效网站推广公司/个人博客seo
  • 西宁网站建设方案/手机百度一下
  • 品牌网站大全/企业管理培训课程
  • 做网站百度收费吗/怎么进行网站关键词优化
  • 北京哪家做网站优化/免费网站制作教程
  • seo针对网站做策划/2023推广平台
  • 高要网站建设公司/电商关键词工具
  • 网站建设工作室制作平台/注册公司网上申请入口
  • 非凡网站建设 新三板/网站ip查询
  • 网站建设倒计时代码/今日微博热搜榜前十名
  • 做公司网站哪个好/公司推广方法有哪些
  • 深圳网站建设大公司/seo外链建设的方法
  • 网站建设服务费/买卖平台
  • 学校网站建设源代码/上海网站快速排名提升
  • 织梦手机网站模板/模板建站常规流程
  • 呼和浩特市手机网站/推广普通话手抄报模板
  • 南山做网站的公司/网店无货源怎么做
  • 网站建设 利润/2024年新冠第三波症状分析
  • 企业网站建设资金预算表/郭生b如何优化网站
  • 沈阳手机网站制作/深圳seo外包公司
  • 下载百度导航app/佳木斯seo