2 lanhailvcao lanhailvcao 于 2012.11.07 10:42 提问

怎么避免使用block时 的保留周期?

如题,怎么样在通过属性定义的NSMutableArray中增加对象?

[tapBlockView setTapBlock:^(UIImage* image) {
   [self.myImageArray addObject:image]; // 保留周期
}

如果我创建如下的引用:

__weak NSMutableArray *array = self.myImageArray;
[tapBlockView setTapBlock:^(UIImage* image) {
    [array addObject:image]; //这种情况怎么更新原始数组?
}

还有:

__weak id weakSelf = self;
[tapBlockView setTapBlock:^(UIImage* image) {
    [weakSelf storeImageInaNewMethod:image]; //调用SToreImageInaNewMethod
}

-(void)storeImageInaNewMethod:(UIImage*)image {
[self.myImageArray addObject:image]; // 再次保留周期
}

怎么更新通过属性定义的原始对象?

2个回答

g989_1314125
g989_1314125   2012.11.07 11:34

试试把你的第二个和第三个结合起来

__weak id weakSelf = self;
[tapBlockView setTapBlock:^(UIImage* image) {
    [weakSelf.myImageArray addObject:image];
}
Mr_me
Mr_me   2012.11.07 13:20

g989已经回答了,我的来自2012 WWDC

__weak myClass *weakSelf = self;

[tapBlockView setTapBlock:^(UIImage* image) {
    __strong myClass *strongSelf = weakSelf;
    if(strongSelf) {
        [strongSelf.myImageArray addObject:image];
    }
}];
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!