My Object有一些实例变量,如下所示:
@interface MyObject : NSObject
{
@private
NSDictionary * resultDictionary ;
}
这是方法:
- (void) doSomething
{
__weak typeof(self) weakSelf = self ;
[TaskAction invoke:^(NSDictionary* result){
if(result){
weakSelf->resultDictionary = result ; // dereferencing a weak pointer is not allowed due to possible null value caused by race condition , assign it to strong variable first ...
}
}]
}
iOS编译器抛出一个错误://由于种族条件可能导致空值,因此不允许取消引用弱指针,首先将其分配给强变量...
错误陈述是:weakSelf-> resultDictionary = result;
你能帮我解释一下这个错误的原因吗。
答案 0 :(得分:3)
您实际上不需要此代码中的弱引用。这里没有保留周期的风险。
但是,如果你这样做,解决办法就是为私人ivar制作一个属性。然后你可以通过块内的弱指针访问该属性。
附注 - 不要将私人ivars放在公共界面中。没有充分的理由将私有细节放在公共界面中。将私有ivar(或私有属性)放在.m文件中的私有类扩展名中。
.h文件:
@interface MyObject : NSObject
@end
.m文件:
@interface MyObject()
@property (nonatomic, strong) NSDictionary *resultDictionary;
@end
@implementation MyObject
- (void)doSomething {
[TaskAction invoke:^(NSDictionary* result){
if (result){
self.resultDictionary = result;
}
}];
}
@end