AWS iOS SDK 1.5.0 copyObject导致内存错误崩溃

AWS iOS SDK 1.5.0 copyObject导致内存错误崩溃,ios,objective-c,amazon-s3,Ios,Objective C,Amazon S3,IOS 5+; ARC启用; aws ios sdk 1.5.0 我试图在AmazonS3中将文件从一个“文件夹”复制到另一个“文件夹”。我可以在Amazon S3上看到文件已成功复制,但随后我的应用程序因内存错误而崩溃 我可以看到copyObject已被弃用,但我必须复制文件,所以我使用它并在启用僵尸时出现以下错误 -S3CopyObjectResponse发布:消息发送到解除分配的实例 //copy request S3CopyObjectRequest *copyT

IOS 5+; ARC启用; aws ios sdk 1.5.0

我试图在AmazonS3中将文件从一个“文件夹”复制到另一个“文件夹”。我可以在Amazon S3上看到文件已成功复制,但随后我的应用程序因内存错误而崩溃

我可以看到
copyObject
已被弃用,但我必须复制文件,所以我使用它并在启用僵尸时出现以下错误

-S3CopyObjectResponse发布:消息发送到解除分配的实例

//copy request
            S3CopyObjectRequest *copyToNewFolder=[[S3CopyObjectRequest alloc] initWithSourceKey:amazonFileName sourceBucket:[Constants userEventBucket] destinationKey:destinationFile destinationBucket:[Constants userEventBucket]];
                 copyToNewFolder.metadataDirective = @"COPY";

            S3CopyObjectResponse *copiedResponse=[self.s3 copyObject:copyToNewFolder];
            if(copiedResponse.error != nil)
            {
                NSLog(@"Error: %@", copiedResponse.error);
                return;
            }

如何复制文件而不出现内存错误?

这是一个有趣的问题,它源于AWS SDK中方法命名的错误选择。请注意,AWS SDK不支持ARC

[self.s3 copyObject:copyToNewFolder];
当ARC看到此方法名称时,它假定该方法根据Obj-C命名约定返回一个具有未完成保留计数的值方法被隐式标记为u属性u((ns_返回_保留))()。但是,令人惊讶的是,这个
copyObject
方法返回一个自动删除的实例(请参见和),因为AWS在这里的不同上下文中使用
copy
。结果如何?过度释放的物体和碰撞

解决方案是使用
\uu属性\uuuuuu((ns\u返回\u未保留))
ns\u返回\u未保留的
显式标记方法。我看到Amazon已经不赞成这种方法(也许是为了纠正您面临的问题),所以您可以简单地使用
objectCopy
方法

进一步阅读: