首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要使用点对点类型(NSProgress * __autoreleasing *)而不是AFNetworking中的点类型(NSProgress* __autoreleasing)?

为什么要使用点对点类型(NSProgress * __autoreleasing *)而不是AFNetworking中的点类型(NSProgress* __autoreleasing)?
EN

Stack Overflow用户
提问于 2014-09-21 04:34:01
回答 1查看 480关注 0票数 0

在AFNetworking中,我发现了这个函数:

代码语言:javascript
复制
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
                                         fromFile:(NSURL *)fileURL
                                         progress:(NSProgress * __autoreleasing *)progress
                                completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;

这里的进度类型是NSProgress * __autoreleasing *。

我不知道为什么这里使用点对点类型,而不仅仅是点类型。在此函数中,进度参数的用法如下:

代码语言:javascript
复制
if (progress) {
    *progress = delegate.uploadProgress;
}

在我看来,如果宣布:

代码语言:javascript
复制
NSProgress *progress = nil;

经过:

代码语言:javascript
复制
progress:(NSProgress * __autoreleasing *)progress

并将其用作:

代码语言:javascript
复制
*progress = delegate.uploadProgress;

就像路过一样

代码语言:javascript
复制
progress:(__autoreleasing NSProgress *)progress

并将其用作:

代码语言:javascript
复制
progress  = delegate.uploadProgress;

有谁能帮助解释为什么在这里使用点对点类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 05:15:21

该参数的目的是让方法传回指向NSProgress对象的指针。为此,方法需要分配给调用者的变量。

函数接收传递值的副本。如果参数只是__autoreleasing NSProgress*,则函数将接收传递指针的副本。调用方和方法都有包含指向NSProgress对象的指针的变量,但它们是单独的变量。当使用progress = delegate.uploadProgress;分配给其变量的方法时,它只会更改其副本。分配不会影响调用者的变量。

当参数为NSProgress * __autoreleasing *且调用方传递&callersProgress时,函数将收到指向调用方变量的指针的副本。当方法使用*progress (如在*progress = delegate.uploadProgress;中)时,它会取消该指针的引用。它会产生对调用者变量的引用。因此,该方法将赋值给调用者的变量,而不仅仅是局部变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25955838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档