A tarefa múltipla é um hack em Obj-C?
-
21-09-2019 - |
Pergunta
Então, eu tenho uma classe (ikimageView) com várias propriedades.
Eu sei que a exibição setprop: bool retorna vazio. No entanto:
BOOL b = view.prop = NO;
parece funcionar. Se eu tinha uma função f () que retorna um booleano, alguém sabe se isso está realmente fazendo:
[view setProp:f()];
Bool b = [view getProp];
ou
[view setProp: f()];
Bool b = f();
ou
BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;
Eu pergunto porque quando eu fizer:
BOOL b = view.hasHorizontalScroller = YES;
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);
Eu recebo "B é 1, rolagem é 0" (o que significa que o SethashorizontalsCroller está falhando por algum motivo, mas B está definido corretamente)
mas:
BOOL b;
[view setHasHorizontalScroller: YES];
b = [view getHasHorizontalScroller];
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);
Eu recebo "b é 0 rolagem é 0"
Isso é muito confuso para mim. (Além disso, se alguém puder me dizer como a configuração da propriedade para sim falha, mas então ele consegue definir B ... e ainda não surgem erros ...
Solução
Está fazendo
BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;
Houve uma discussão sobre isso antes das propriedades enviadas. Algumas pessoas pensaram que esse deveria ser um erro de compilação para evitar a ambiguidade.
Provavelmente é melhor evitar completamente a construção.
Outras dicas
Parece não um bug. Código seguinte:
a.text = b.text = c.text;
Produz esses métodos chamados:
// [c text]
// [b setText:]
// [a setText:]
Como você pode ver [b text]
não é chamado nesta cadeia :(