__weak self没有按预期工作

时间:2015-10-12 12:01:56

标签: ios

我有以下代码:

    __weak id weakSelf = self;
[geocoder reverseGeocodeLocation:currLocation completionHandler:^(NSArray *placemarks, NSError *error) {
    if(error)
        NSLog(@"Geocoder failed with error: %@", error);
    else
        weakSelf.placeMark = [placemarks objectAtIndex:0];



            }];
    NSLog(@"current placemark: %@", self.placeMark);

}

我想要使用弱自我的原因,因为我在另一个例子中看到了这个,当我在这个块中通过self.some_property研究为什么“Xcode无法找到”我的属性时。无论如何,我现在收到错误信息,表明placeMark不是weakSelf的成员。 placeMark被声明为一个强大的非原子属性。任何帮助表示赞赏

3 个答案:

答案 0 :(得分:1)

尝试投射变量,因为这里只有(id),因此Xcode无法识别实例的自定义属性

__weak typeof(self) weakSelf = self;

答案 1 :(得分:0)

试试这个

 __weak typeof(<self class name>) weakSelf = self;

这是创建要在块

中使用的weakSelf对象的正确方法

您还可以在块中创建另一个类对象,如

__weak typeof(A) weakA = self;
__weak typeof(B) weakB = objB;

答案 2 :(得分:0)

如果您确定对象类型,请在此处将id替换为实际对象类型。像这样:

__weak MyClass weakSelf = self;

现在,您可以直接访问placeMark上的MyClass等媒体资源。