OC的MRC和ARC内存管理机制注意:Xcode4以前没有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中。

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

在ARC中与内存管理有关的标识符,可以分为变量标识符和属性标识符,对于变量有__strong,__weak,默认是strong;而对于属性表识符有:

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

也存在autoreleasepool。

***对于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.

时间: 2024-10-29 19:08:25

OC的MRC和ARC内存管理机制注意:Xcode4以前没有ARC。的相关文章

ARC内存管理机制详解

ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数.有自动引用计数,那么就得有手动引用计数MRC(Mannul Reference Counting),前面已经提到过了MRC.那么在ARC模式下是不是意味着我们就可以一点也不用进行内存管理的呢?并不是这样的,我们还需要代码进行内存的管理.下面会结合着代码把OC中的ARC机制做一个详细的总结(欢迎大家批

MRC、ARC内存管理机制

MRC下,oc内存管理遵循"谁创建.谁释放.谁引用.谁管理"的机制,当创建或引用一个对象时,需要向她发送alloc,copy,retain消息,当释放该对象时需要发送release消息,当引用计数为零的时候,系统释放该对象. ARC是自动引用计数,管理机制与手动机制一样,只是不再需要调用retain,release,autorelease,它会在适当的位置插入release和autorelease.使用ARC不代表不需要内存管理了,例如使用block时要避免循环引用,代理作为属性时,要

【iOS开发-35】有了ARC内存管理机制,是否还须要操心内存溢出等问题?——面试必备

答案:必需要操心啊,ARC也不是万能的. 这里主要是涉及到集合类的数据类型. 比方数组,我们定义了一个可变数组muarr1,然后把一个对象p1加到muarr1中,此时会对这个对象retain一次,相当于retainCount+1,仅仅有当这个数组removeObject:p1删除这个对象时.或者这个数组自己muarr1=nil;了,或者这个数组removeAllObjects时,它才会对这个对象或者里面全部对象release一次.

【iOS开发-35】有了ARC内存管理机制,是否还需要担心内存溢出等问题?——面试必备

答案:必须要担心啊,ARC也不是万能的. 这里主要是涉及到集合类的数据类型. 比如数组,我们定义了一个可变数组muarr1,然后把一个对象p1加到muarr1中,此时会对这个对象retain一次,相当于retainCount+1,只有当这个数组removeObject:p1删除这个对象时.或者这个数组自己muarr1=nil;了,或者这个数组removeAllObjects时,它才会对这个对象或者里面所有对象release一次.

OC的内存管理机制

总的来说OC有三种内存管理机制,下面将分别对这三种机制做简要的概述. 1.手动引用计数(Mannul Reference Counting-MRC) mannul:用手的,手工的. 引用计数:retaincount 从英文字面上理解就是在这种机制下,内存需要程序员去手动管理,即通过在代码中调用-retain.-release或者-autorelease去增加和减小对象的引用计数,当引用计数为0时,对象会自动调用-dealloc方法释放所占用的内存. 2.垃圾回收机制(Garbage Collec

简述OC中内存管理机制

1.OC的内存管理机制是引用计数, 内存管理原则是谁开辟谁释放, 有retain就要有release. 2. 分为ARC(自动引用计数)和MRC(非自动引用计数), 在MRC下, 我们需要手动管理内存,需要使用到retain/copy/release/autorelease等方法实现内存管理, ARC下一般不需要程序员手动管理内存, 系统会为程序添加自动释放池以实现内存管理, 当然, 咱们说的一般不需要不能理解为完全不需要考虑内存问题, 比如在解决block循环引用问题的时候, 就需要使用__w

简述OC中内存管理机制。

1        简述OC中内存管理机制.与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic .atomic.strong.weak属性的作用? OC使用了一种叫做引用计数的机制来管理对象,如果对一个对象使用了alloc.[Mutable]copy,retain,那么你必须使用相应的realease或者aut

OC 内存管理机制总结

OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创造的成员变量交由系统统一处理,不需要外部人员干预,有点像java中gc(垃圾回收机制). 2)之前是没有自动内存管理机制的,后期苹果想拓展自己的开发市场,吸引其他平台开发者入住ios开发阵营,其中收到内存管理是很发杂的一块,对于转入IOS开发者不利,因此苹果推出了自动内存管理机制. 2.接下来我们将

iOS内存管理机制解析之MRC手动引用计数机制

前言: iOS的内存管理机制ARC和MRC是程序员参加面试基本必问的问题,也是考察一个iOS基本功是 否扎实的关键,这样深入理解内存管理机制的重要性就不言而喻了. iOS内存管理机制发展史 iOS 5以前 :MRC(手动引用计数) iOS 5及以后:ARC (自动引入计数) MRC机制时代 "谁开辟申请,谁及时合理释放" 面对自己申请的内存空间是要及时进行回收的: 不及时释放会造成什么结果? 对象存储在栈上,可能会大量的占用内存,内存不足造成程序闪退(也就是所说的内存泄露) 不合理释放