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

深圳平湖网站建设公司/优化搜索关键词

深圳平湖网站建设公司,优化搜索关键词,wordpress on.7主题,网络管理员需要懂网站建设吗Objective-c的内存管理MRC与ARC Objective-c中提供了两种内存管理机制MRC(MannulReference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求。注意的是Xcode 4.1及其以前版本没有…
 

Objective-c的内存管理MRC与ARC

 

Objective-c中提供了两种内存管理机制MRC(MannulReference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求。注意的是Xcode 4.1及其以前版本没有ARC,MRC与ARC的区别如图1所示。需要理解MRC,但实际使用时强推ARC。

 

图1  MRC与ARC区别示意图

 

1. Objective-c语言中的MRC(MannulReference Counting)

 

在MRC的内存管理模式下,与对变量的管理相关的方法有:retain,release和autorelease。retain和release方法操作的是引用记数,当引用记数为零时,便自动释放内存。并且可以用NSAutoreleasePool对象,对加入自动释放池(autorelease调用)的变量进行管理,当drain时回收内存。

(1)      retain,该方法的作用是将内存数据的所有权附给另一指针变量,引用数加1,即retainCount+= 1;

(2)      release,该方法是释放指针变量对内存数据的所有权,引用数减1,即retainCount-= 1;

(3)      autorelease,该方法是将该对象内存的管理放到autoreleasepool中。

示例代码:

//假设Number为预定义的类

Number* num = [[Number alloc] init];

Number* num2 = [num retain];//此时引用记数+1,现为2

[num2 release]; //num2 释放对内存数据的所有权 引用记数-1,现为1;

[num release];//num释放对内存数据的所有权 引用记数-1,现为0;

[num add:1 and 2];//bug,此时内存已释放。

 

//autoreleasepool 的使用 在MRC管理模式下,我们摒弃以前的用法,NSAutoreleasePool对象的使用,新手段为@autoreleasepool

 

@autoreleasepool {

       Number* num = [[Number alloc] init];

              [numautorelease];//由autoreleasepool来管理其内存的释放

   }

 

对与Objective-c中属性的标识符可以总结为:

@property (nonatomic/atomic,retain/assign/copy, readonly/readwrite) Number* num;

(1)      nonatomic/atomic,表示该属性是否是对多线程安全的,是不是使用线程锁,默认为atomic,

(2)      retain/assign/copy,是有关对该属性的内存管理的,

l   assign"is the default. In the setter that is created by @synthesize, the value willsimply be assigned to the attribute, don’t operate the retain count. Myunderstanding is that "assign" should be used for non-pointer attributes.

l   "retain"is needed when the attribute is a pointer to an object. The setter generated by@synthesize will retain (aka add a retain count) the object. You will need torelease the object when you are finished with it.

l   "copy"is needed when the object is mutable. Use this if you need the value of theobject as it is at this moment, and you don't want that value to reflect anychanges made by other owners of the object. You will need to release the objectwhen you are finished with it because you are retaining the copy.

(3)      readwrite /readonly -"readwrite" is the default. When you @synthesize, both a getter and asetter will be created for you. If you use "readonly", no setter willbe created. Use it for a value you don't want to ever change after the instantiationof the object.

 

 

2. Objective-c语言中的ARC(AutomaticReference Counting)

在ARC中与内存管理有关的标识符,可以分为变量标识符和属性标识符,对于变量默认为__strong,而对于属性默认为unsafe_unretained。也存在autoreleasepool。

 

对于变量的标识符有:

(1) __strong,is the default. An object remains “alive” as long as there is a strong pointerto it.

(2) __weak,specifies a reference that does not keep the referenced object alive. A weakreference is set to nil when there are no strong references to the object.

(3)__unsafe_unretained,specifies a reference that does not keep the referenced object alive and is notset to nil when there are no strong references to the object. If the object itreferences is deallocated, the pointer is left dangling.

(4)__autoreleasing,is used to denote arguments that are passed by reference (id *) and areautoreleased on return,managedby Autoreleasepool.

 

对于变量标识符的用法:

__strong Number* num = [[Number alloc]init];

 

在ARC内存管理模式下,其属性的标识符存在以下几种:

@property (nonatomic/atomic, assign/retain/strong/weak/unsafe_unretained/copy,readonly/readwrite) Number* num;//默认为unsafe_unretained

 

其中assign/retain/copy与MRC下property的标识符意义相同,strong类似与retain,assign类似于unsafe_unretained,strong/weak/unsafe_unretained与ARC下变量标识符意义相同,只是一个用于属性的标识,一个用于变量的标识(带两个下划短线__)。所列出的其他的标识符与MRC下意义相同。

(1)对于assign,你可以对标量类型(如int)使用这个属性。你可以想象一个float,它不是一个对象,所以它不能retain、copy。

(2)对于copy,指定应该使用对象的副本(深度复制),前一个值发送一条release消息。基本上像retain,但是没有增加引用计数,是分配一块新的内存来放置它。特别适用于NSString,如果你不想改变现有的,就用这个,因为NSMutableString,也是NSString。

 

对于Core Foundation与objective-cObject进行交换时,需要用到的ARC管理机制有:

 

(1) (__bridge_transfer<NSType>) op oralternatively CFBridgingRelease(op) isused to consume a retain-count of a CFTypeRef whiletransferring it over to ARC. This could also be represented by id someObj =(__bridge <NSType>) op; CFRelease(op);

(2) (__bridge_retained<CFType>) op oralternatively CFBridgingRetain(op) isused to hand an NSObject overto CF-land while giving it a +1 retain count. You should handle a CFTypeRefyoucreate this way the same as you would handle a result of CFStringCreateCopy().This could also be represented by CFRetain((__bridge CFType)op); CFTypeRef someTypeRef =(__bridge CFType)op;

(3) __bridge justcasts between pointer-land and Objective-C object-land. If you have noinclination to use the conversions above, use this one.

 

转载于:https://www.cnblogs.com/LiLihongqiang/p/5954452.html

http://www.lbrq.cn/news/1465255.html

相关文章:

  • ppt做会动彩字网站/百度关键词热搜
  • 要想提高网站排名应该如何做/网络营销的概述
  • 企业应用平台和系统管理/北京网站seo费用
  • 付费软件免费拿/郑州搜狗关键词优化顾问
  • 江西省网站备案/武汉seo工厂
  • 网站css下载/南昌网站优化公司
  • 小男孩与大人做的网站/长春网站推广公司
  • 成都移动网站建设/好搜seo软件
  • 做爰全过程免费狐狸网站/四川网站制作
  • wordpress清理插件/seo是什么化学名称
  • 网站设计一级网页/中国免费网站服务器2020
  • 建设局网站建设方案书/东莞关键词排名优化
  • 个人网站备案能几个/网络广告
  • 南昌网站建设培训学校/如何做关键词优化
  • 眉山市做网站的公司/seo到底是什么
  • 选服务好的网站建设公司/企业网站设计图片
  • 网站增长期怎么做/如何进行网络营销策划
  • 网站公安局备案 所需要的材料/seo月薪
  • c 网站做死循环/抖音优化
  • 网站高中建设工具/百度刷排名seo
  • 外贸网站推广渠道/seo技术培训岳阳
  • 上海品牌网站开发/山东泰安网络推广
  • asp.net网站支持多国语言/进入百度官网首页
  • 模板网站也可以做优化/互联网广告是做什么的
  • 一级a做爰片免费视频网站/国外免费建站网站
  • 钢铁网站哪家做的好/互联网关键词优化
  • 个人备案可以做哪些网站/建立网站的流程
  • 张氏万家网站建设/我想做电商怎么加入
  • asp故障解答网站模板/seo优化工作内容
  • 给女朋友做的网站/semester是什么意思
  • C语言数据结构(7)贪吃蛇项目2.贪吃蛇项目实现
  • 烽火HG680-KD_海思MV320处理器-安卓9-原厂系统升级包-针对解决烧录不进系统的问题
  • 探索延迟生效变量类:一种灵活的状态管理机制
  • 【计算机网络】Socket网络编程
  • 初始C语言---第四讲(数组)
  • 面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答