jia*_*hua 1 asynchronous retain ios automatic-ref-counting
请参阅以下代码示例(ARC模式),SKProductsRequest如何保留自己以等待响应?我的意思是在ARC模式下你不能写[self retain],SKProductsRequest如何在start方法中保留self,然后在响应后释放self?如你所知,代表总是很弱.
SKProductsRequest就是这里的一个例子,现在我需要这样一个服务类,并且不知道如何在请求发出时保留自己然后在响应回来时释放自己,任何有想法的人请一起分享和讨论,在此先感谢.
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
productRequest = productsRequest;
productsRequest.delegate = self;
[productsRequest start];
Run Code Online (Sandbox Code Playgroud)
PS:关于objc_setAssociatedObject,需要保持保留关系的外部长实时对象.
objc_setAssociatedObject(externalLiveObj, &kRetainSelfKey, self, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
Run Code Online (Sandbox Code Playgroud)
给自己一个实例变量.将其设置为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
}
Run Code Online (Sandbox Code Playgroud)
然后在委托方法中,将其设置回nil:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
// process response here, and then...
me = nil;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |