我正在使用Apple指南中非常简单的代码:
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.
}
但是对于行receivedData = [[NSMutableData data] retain];
,Xcode给了我一个错误:PushController.m:72:25: ARC forbids explicit message send of 'retain'
如何处理?我正在使用Xcode 4.4.1
答案 0 :(得分:43)
您目前正在使用ARC为您引用计数。 (ARC是“自动引用计数”,iOS 5的一项新功能)。因此,您无需手动保留或释放。您可以一起删除保留呼叫,也可以通过执行以下操作关闭ARC:
点击左侧导航视图中的项目名称,转到目标 - >构建阶段并将-fno-objc-arc
添加到任何相关文件的“编译器标志”。
答案 1 :(得分:1)
我解决了以下问题。代码适用于Objective-C。
无论您使用哪种文件编写从CIImage到CGImageRef的图像的方法:
CGImageRef cgImage = [_ciContext createCGImage:currentImage fromRect:[currentImage extent]];
将该文件设为非ARC。转到项目 - > BuildPhase - > ComplieSources - >您的文件 - >将"-fno-objc-arc"
添加到您的文件中。
如果您的项目中有.pch文件,请进行以下注释:
#if !__has_feature(objc_arc)
#error This file must be compiled with ARC.
#endif
使用以下功能转到用于创建图像的方法:
CGImageRef cgImage = [_ciContext createCGImage:currentImage fromRect:[currentImage extent]];
像这样声明_ciContext:
在.h文件中,声明:
@property (strong, nonatomic) CIContext* ciContext;
在您的方法中,创建上下文:
EAGLContext *myEAGLContext = [[EAGLContext alloc]
initWithAPI:kEAGLRenderingAPIOpenGLES2];
_ciContext = [CIContext contextWithEAGLContext:myEAGLContext options:nil];
使用_ciContext创建图像。
在同一个文件中写下以下方法:
-(void)dealloc
{
[super dealloc];
[EAGLContext setCurrentContext:nil];
}
答案 2 :(得分:-1)
打开或关闭ARC是项目级别设置,如果您需要在两种模式下都需要使用的代码
#if __has_feature(objc_arc)
//dont do a release or a retain or autorelease
#else
//do the release
#endif