Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 这是否仍然会导致ARC内存泄漏_Objective C_Ios_Memory Leaks - Fatal编程技术网

Objective c 这是否仍然会导致ARC内存泄漏

Objective c 这是否仍然会导致ARC内存泄漏,objective-c,ios,memory-leaks,Objective C,Ios,Memory Leaks,这是一个场景: 假设我们有一个MyObject类,我们通过“MyObject.h”中的@property(strong)NSObject*aObj声明一个属性;然后我们在“MyObject.m”中使用这个属性 我想知道A是否存在内存泄漏。在MRC中,如果强保留,A将出现内存泄漏。如果在ARC中,这仍然会导致内存泄漏 否,在ARC下,两者都不会导致内存泄漏。ARC足够聪明,可以处理这些情况。(A)将在MRC中泄漏,RHS返回一个拥有的对象,属性设置器将此作为第二次保留。它不会在电弧中泄漏 (B)

这是一个场景: 假设我们有一个MyObject类,我们通过“MyObject.h”中的
@property(strong)NSObject*aObj
声明一个属性;然后我们在“MyObject.m”中使用这个属性


我想知道A是否存在内存泄漏。在MRC中,如果强保留,A将出现内存泄漏。如果在ARC中,这仍然会导致内存泄漏

否,在ARC下,两者都不会导致内存泄漏。ARC足够聪明,可以处理这些情况。

(A)将在MRC中泄漏,RHS返回一个拥有的对象,属性设置器将此作为第二次保留。它不会在电弧中泄漏


(B) 可能在MRC中泄漏,变量
aObj
可能包含不会发布的自有引用。它不会在ARC中泄漏。

您能解释一下为什么(A)不会在ARC中泄漏吗?@chancy-ARC知道您拥有RHS,因此需要在当前表达式之后释放RHS,因为它无法再访问(即,它没有存储到局部变量中)。因为ARC将向您正在分配的对象添加自动释放调用。ARC知道何时调用保留、释放和自动释放。它比我们这些愚蠢的人类做得更好。如果在MRC下,您知道要添加对autorelease的调用,那么ARC也知道应该这样做。@rmaddy-ARC实际上可以做得更好(这并不意味着它总是会做得更好),并且它可能会在MRC下您应该自动释放的地方释放。对于情况(A),ARC可以在分配后立即释放,相当于MRC代码
NSObject*tmp=[[NSObject alloc]init];self.aObj=tmp;[tmp发布]@CRD True。但ARC的优点是我不必在意。:)
A. self.aObj = [[NSObject alloc] init];

B. aObj = [[NSObject alloc] init];