My Object есть переменная экземпляра, например:IOS: переменная экземпляра в блоке
@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;
Не могли бы вы мне помочь, почему ошибка.
По-моему, вы не правы. 1, Если создать свойство, статус ivar не будет закрытым. 2, в блоке мы не можем использовать self, указатель «self» является сильным указателем – user5465320
Нет, свойство является приватным. Он определен в расширении частного класса. И нет ничего плохого в сильной ссылке на себя в этом случае. Нет никакого эталонного цикла. Попробуй. – rmaddy
Им не нужно использовать имущество - они могут использовать ивар, если они этого захотят; хотя я согласен с тем, что ivar должен быть объявлен в расширении или реализации, а не в интерфейсе. – newacct