一般来说,通过函数(非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];
}