gpt4 book ai didi

ios - 为什么在 AFNetworking 中使用点对点类型(NSProgress * __autoreleasing *)而不仅仅是点类型(NSProgress * __autoreleasing)?

转载 作者:行者123 更新时间:2023-11-29 02:39:35 25 4
gpt4 key购买 nike

在 AFNetworking 中我找到了这个函数:

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
fromFile:(NSURL *)fileURL
progress:(NSProgress * __autoreleasing *)progress
completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler;

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

我不明白为什么这里使用点对点类型而不仅仅是点类型。该函数中progress参数的用法如下:

if (progress) {
*progress = delegate.uploadProgress;
}

在我看来,如果声明:

NSProgress *progress = nil;

通过:

progress:(NSProgress * __autoreleasing *)progress

并将其用作:

*progress = delegate.uploadProgress;

与通过一样

progress:(__autoreleasing NSProgress *)progress

并将其用作:

progress  = delegate.uploadProgress;

有人可以帮忙解释一下为什么这里使用点对点类型吗?

最佳答案

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

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

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

关于ios - 为什么在 AFNetworking 中使用点对点类型(NSProgress * __autoreleasing *)而不仅仅是点类型(NSProgress * __autoreleasing)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com