autorelease对象, 二级指针

一般来说,通过函数(非alloc new copy mutableCopy开头的)返回值返回的或者指针的指针返回的对象都是autorelease对象。(二级指针默认都是autorelease对象)

 

所以看一个常见的代码(ARC下):

NSError *error;

 

[self handeSomething:@"abc" error:&error];

 

-(void)handSomething:(NSString*)str error:(NSError**)error {

    *error = [[NSError alloc] init];

} 

 

这段代码编译后是这样的:

NSError * __strong error;

NSError * __autoreleasing temp;

 

[self handleSomething:@"abc" error:&temp];

 

error = temp;

 

-(void)handleSomething:(NSString*)str error:(NSError* __autoreleasing *)error {

    *error = [[NSError alloc] init];

}

 

 

进一步转成MRC:

NSError * error;

NSError * temp;

 

[self handleSomething:@"abc" error:&temp];

 

error = [temp retain];

 

-(void)handleSomething:(NSString*)str error:(NSError* *)error {

    *error = [[[NSError alloc] init] autorelease];

}

猜你喜欢

转载自www.cnblogs.com/yibinpan/p/13206175.html