首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我使用“弱化”时,我必须使用__block吗?

当我使用“弱化”时,我必须使用__block吗?
EN

Stack Overflow用户
提问于 2014-12-10 16:31:31
回答 1查看 857关注 0票数 0

假设我的类有一个名为hotspotsOperation的实例变量(我使用的是RestKit),并且在一个块中使用( NSOperation by RestKit)。我这么做是因为我希望能够取消正在进行的请求。然而,我有一个关于保留周期的问题,__block。基本上,当我使用弱化/强化时,我必须使用__weak吗?还有另一个问题,如果我不使用弱化/强化,而是将hotspotsOperation从强改为弱,分析器会说没有保留周期,对吗?不如用弱的,而不是弱的/强的?在这种情况下,self会发生什么?谢谢你的建议。

代码语言:javascript
运行
复制
#import "HotspotsService.h"
#import "Constants.h"
#import "Restkit.h"
#import "Hotspot.h"
#import <EXTScope.h>

@interface HotspotsService()
@property (nonatomic,strong) RKObjectManager *objectManager;
@property (nonatomic,strong) RKObjectRequestOperation *hotspotsOperation;
@end

@implementation HotspotsService

-(id) init {
    self=[super init];
    if (self) {
        // restkit
        // mapping
        // response
    }
    return self;
}

-(void) hotspotsWithRadius:(NSUInteger)rad center:(CLLocationCoordinate2D)coordinate onSuccess:(void(^)(NSArray *hotspots))success onFailure:(void(^)(NSError *error))fail {
    [self cancelHotspotsRequest];
    NSDictionary *params = // params
    self.hotspotsOperation = [self.objectManager appropriateObjectRequestOperationWithObject:nil method:RKRequestMethodGET path:kSolrPath parameters:params];
    @weakify(self);
    [self.hotspotsOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        @strongify(self);
        self.hotspotsOperation=nil;
        success(mappingResult.array);
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        @strongify(self);
        self.hotspotsOperation=nil;
        fail(error);
    }];
    [self.objectManager enqueueObjectRequestOperation:self.hotspotsOperation];
}

-(void) cancelHotspotsRequest {
    [self.hotspotsOperation cancel];
    self.hotspotsOperation=nil;
}

@end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 20:24:34

我会使hotspotsOperation属性变得脆弱,因为您正在将操作传递给RestKit来管理,并且您只关心它一辈子--您对拥有它没有兴趣。这也意味着您不需要在块中捕获self

如果要在由self拥有的对象保留的块中捕获self,则应该使用弱引用。如何做到这一点取决于您自己,但@weakify似乎非常方便和简单。

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

https://stackoverflow.com/questions/27406114

复制
相关文章

相似问题

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