gpt4 book ai didi

ios - 如何在ARC模式下保留self,例如SKProductsRequest,在start方法中保留self,然后在响应回来后释放?

转载 作者:行者123 更新时间:2023-12-01 17:52:19 25 4
gpt4 key购买 nike

看下面的代码示例(ARC模式),SKProductsRequest如何保持自身等待响应回来?我的意思是在ARC模式下你不能写[self retain],SKProductsRequest如何在start方法中保留self,然后在响应后释放self?如您所知,代表总是很弱。

SKProductsRequest在这里只是一个例子,现在我需要这样一个服务类,不知道如何在请求发出时保留自己,然后在响应回来时释放自己,有想法的人请分享和讨论,提前谢谢。

SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
productRequest = productsRequest;
productsRequest.delegate = self;
[productsRequest start];

PS:
关于 objc_setAssociatedObject,外部长生命周期对象需要保持保留关系。

objc_setAssociatedObject(externalLiveObj, &kRetainSelfKey, self, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

最佳答案

给自己一个实例变量。设置为 self当您开始请求时:

@implementation MyRequestDelegate {
MyRequestDelegate *me;
}

- (void)startProductsRequest {
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
productRequest = productsRequest;
productsRequest.delegate = self;
[productsRequest start];
me = self; // this retains self
}

然后在委托(delegate)方法中,将其设置回 nil :
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
// process response here, and then...
me = nil;
}

关于ios - 如何在ARC模式下保留self,例如SKProductsRequest,在start方法中保留self,然后在响应回来后释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800198/

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