Skip to content

Instantly share code, notes, and snippets.

@sodastsai
Created October 13, 2016 00:14
Show Gist options
  • Save sodastsai/dbbe5034ef7b7b62d578fbd32685ee5f to your computer and use it in GitHub Desktop.
Save sodastsai/dbbe5034ef7b7b62d578fbd32685ee5f to your computer and use it in GitHub Desktop.
Auto release pool and NSError
#import <Foundation/Foundation.h>
// Assume -fobjc-arc ... 假設有 ARC
//
// 存成 `main.m` 然後在 Terminal 跑 `clang -framework Foundation -fobjc-arc -o main main.m && ./main && rm main`
// 然後在 `./main` 就會動囉
//
NSArray *ggFunction1(NSError *__autoreleasing *error) {
@autoreleasepool {
if (error) {
*error = [NSError errorWithDomain:@"QQ domain" code:0 userInfo:nil];
}
return nil;
}
}
NSArray *ggFunction2(NSError *__autoreleasing *error) {
@autoreleasepool {
if (error) {
*error = [[NSError alloc] initWithDomain:@"QQ domain" code:0 userInfo:nil];
}
return nil;
}
}
NSArray *okFunction(NSError *__autoreleasing *outError) {
NSArray *result = nil;
NSError *error = nil;
@autoreleasepool {
error = [[NSError alloc] initWithDomain:@"OK domain" code:0 userInfo:nil];
result = nil; // QQ
}
if (outError) {
*outError = error;
}
return result;
}
int main(int argc, char *argv[]) {
@autoreleasepool {
NSLog(@"OK Start --------------");
NSError *error1;
NSArray *array1 = okFunction(&error1);
NSLog(@"ok: %@: %@", array1, error1);
NSLog(@"OK End --------------");
NSLog(@"GG1 Start --------------");
NSError *error2;
NSArray *array2 = ggFunction1(&error2);
NSLog(@"gg: %@: %@", array2, error2);
NSLog(@"GG1 End --------------");
NSLog(@"GG2 Start --------------");
NSError *error3;
NSArray *array3 = ggFunction2(&error3);
NSLog(@"gg: %@: %@", array3, error3);
NSLog(@"GG2 End --------------");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment