1

我目前正在围绕 Dropbox、Google Drive 和 Box.com SDK 的一些方法制作基于块的包装器。我已经成功地将上传功能打包到这三个中,并且它们都运行良好。包装器有一个“通用”接口,符合三个服务之间的通用规范,这就是我这样做的原因。

Dropbox 是唯一在委托回调上运行的。我对上传课程没有任何问题。但是,我正在尝试以相同的方式实现一些下载类。到目前为止,我遇到了一个问题,即在调用包装器中的任何委托方法之前,我返回的实例会立即被释放。首先查看_working_“Upload”类的方法结构

+(id)uploaderWithPaths:(NSMutableDictionary *)paths 
              progress:(JAUploadProgressBlock)progBlock 
             completed:(JAUploadCompletedBlock)compBlock
                failed:(JAUploadFailedBlock)failBlock;

-(void)upload;

//in .m
return [[[self class] alloc]initWithPaths:paths 
                                 progress:progBlock 
                                completed:compBlock 
                                   failed:failBlock];
-(void)upload {
    //setup Dropbox Rest Client
    //configure delegate, etc
    [dbRestClient doUpload...];
}
//delegate stuff
..onProgress {
self.progressBlock(progress);

..onComplete {
self.completedBlock(info);

..onFailed {
self.failedBlock(error);

因此,实例化和执行上传是这样的:

JAUploadProgressBlock progress = ^(CGFloat percentage) {
    NSLog(@"%.2f",percentage); }
JAUploadCompletedBlock completed = ^(NSMutableDictionary *info) {
    NSLog(@"Success: %@",info); }
JAUploadFailedBlock failed = ^(NSError *error) {
    NSLog(@"Failed: %@",[error localizedDescription];
JAUploadWrapperDropbox *uploader 
     = [JAUploadWrapperDropbox uploaderWithPaths:paths
                                        progress:progress
                                       completed:completed
                                          failed:failed];
[uploader upload];

在上传包装类中,实例不会立即被释放,包装内的委托消息被调用,我的块回调触发,一切都按计划进行。

但是,我的下载包装器类(其建模与上传包装器完全相同)在调用包装器中的任何委托方法之前被释放。

这个类不利于成为一个属性,因为它不适合重复使用。它真的是一次性使用或一次性使用。使用强大的属性解决了这个问题,但就像我说的,我不需要为我的上传包装类使用属性。

我究竟做错了什么?

您可以在https://github.com/justinxxvii/JAOperationWrapper查看此项目。 我确实提交了下载包装器,但标头还没有任何文档。

4

0 回答 0