Objc中2维指针作为输出参数时由ARC及@autoreleasepool引发的血案
2014-07-23 16:30
393 查看
先看下面一个例子
在NSLog输出的时候会EXC_Bad_ACCESS
正确写法应该是这样:
#import <UIKit/UIKit.h> #import "AppDelegate.h" @interface Something : NSObject - (void)doWithError:(NSError **)outError; @end @implementation Something - (void)doWithError:(NSError **)outError { @autoreleasepool { *outError = [NSError errorWithDomain:@"Emergency" code:999 userInfo:nil]; } } @end int main(int argc, const char *argv[]) { @autoreleasepool { NSError *error = nil; // Sometimes EXC_BAD_ACCESS when return from this method. [[[Something alloc] init] doWithError:&error]; // At this point, the main thread gives EXC_BAD_ACCESS. NSLog(@"%@", error); } return 0; }
在NSLog输出的时候会EXC_Bad_ACCESS
正确写法应该是这样:
@interface Something : NSObject - (void)doWithError:(NSError **)outError; @end @implementation Something - (void)doWithError:(NSError **)outError { NSError *error = nil; @autoreleasepool { error = [NSError errorWithDomain:@"Emergency" code:999 userInfo:nil]; // Do something } if(error) { *outError = error; } } @end int main(int argc, char * argv[]) { @autoreleasepool { NSError *__autoreleasing error = nil; [[[Something alloc] init] doWithError:&error]; // At this point, the main thread gives EXC_BAD_ACCESS. NSLog(@"%@", error); int a = 1; ++a; } return 0; }
相关文章推荐
- ARC 工程出现错误__NSAutoreleaseNoPool(): Object 0x8850ce0 of class __NSCFData autoreleased with no pool in
- @autoreleasepool在ARC和MRC下的区别
- AutoReleasePool 和 ARC 以及Garbage Collection
- 设置了ARC,为什么还需要@autoreleasepool
- ARC中的@autoreleasepool还有作用吗?
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- 既然设置了ARC,为什么还要使用@autoreleasepool
- @autoreleasepool在ARC和MRC下的区别
- iOS 非ARC内存管理 autorelease方法和@autoreleasepool
- ARC中的@autoreleasepool
- Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
- [转载]一个指针参数引发的血案
- 指针的学习(3)指针作为函数的参数的输入和输出的参数的特性
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- AutoReleasePool 和 ARC 以及Garbage Collection
- iOS 非ARC基本内存管理系列 4-autorelease方法和@autoreleasepool
- @autoreleasepool在ARC和MRC下的区别
- __week and autorelease pool in ARC in Xcode 4.2
- @autoreleasepool在ARC和MRC下的区别
- 指针作为函数参数传递