ARC forbids explicit message send of 'retain' issue
我使用的是苹果指南中非常简单的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | NSMutableData *receivedData; // Create the request. NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; // create the connection with the request // and start loading the data NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; if (theConnection) { // Create the NSMutableData to hold the received data. // receivedData is an instance variable declared elsewhere. receivedData = [[NSMutableData data] retain]; } else { // Inform the user that the connection failed. } |
但是对于行
如何处理?我用的是xcode 4.4.1
您当前正在使用圆弧为您引用计数。(ARC是"自动参考计数",iOS 5的新功能)。因此,您不需要手动保留或释放。您可以同时删除所有保留呼叫,也可以通过执行以下操作关闭ARC:
单击左侧导航视图上的项目名称,转到目标->构建阶段,并将
有关删除的信息,请参阅此处。
有关ARC的基本信息,请参见此处。
我解决了下面的问题。代码是针对Objective-C的。
无论您编写哪种文件,都可以将图像从ciimage获取到cgimageref:
1 | CGImageRef cgImage = [_ciContext createCGImage:currentImage fromRect:[currentImage extent]]; |
将该文件设为非圆弧。进入Project->BuildPhase->ComplieSources->Your File->Add
如果项目中有.pch文件,请进行以下行注释:
1 2 3 | #if !__has_feature(objc_arc) #error This file must be compiled with ARC. #endif |
转到使用以下功能创建图像的方法:
1 | CGImageRef cgImage = [_ciContext createCGImage:currentImage fromRect:[currentImage extent]]; |
像这样声明上下文:
在.h文件中声明:
1 | @property (strong, nonatomic) CIContext* ciContext; |
在方法中,创建上下文:
1 2 3 | EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; _ciContext = [CIContext contextWithEAGLContext:myEAGLContext options:nil]; |
使用CiContext创建图像。
在同一文件中写入以下方法:
1 2 3 4 5 | -(void)dealloc { [super dealloc]; [EAGLContext setCurrentContext:nil]; } |
打开或关闭ARC是项目级设置,如果需要让代码在两种模式下都工作,则需要使用
1 2 3 4 5 | #if __has_feature(objc_arc) //dont do a release or a retain or autorelease #else //do the release #endif |