maneira correta de usar UIActionSheet Delegado? Ponteiros mapeado para memória idêntico
Pergunta
Eu estou usando a variável actionSheet passou por actionSheet: didDismissWithButtonIndex: comparar a actionSheet chamando para uma lista de variáveis ??UIActionSheet na minha classe. Esta parece ser a forma como o método delegado foi projetado para diferenciar entre eventos.
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (actionSheet == actionSheet1) {
switch (buttonIndex) {
case 0:
// Do Something
break;
case 1:
// Do Something Else
break;
case 2:
// Cancel
break;
}
}
if (actionSheet == actionSheet2) {
switch (buttonIndex) {
case 0:
// Do Something
break;
case 1:
// Do Something Else
break;
case 2:
// Cancel
break;
}
}
}
Cada vez que um UIActionSheet é exibido, eu alloc uma instância de UIActionSheet a uma das variáveis ??de classe, defina as propriedades de exibição, exibi-lo e liberá-lo .
Isso funciona sem problemas, em primeiro lugar. O problema é que depois de correr por um tempo, eventualmente, ambos UIActionSheet ponteiros (variáveis ??de classe actionSheet1 & actionSheet2 no exemplo de código acima) vai acabar apontando para a mesma memória, dependendo do que acontecer em tempo de execução, fazendo com que ambos se as declarações do delegado método para avaliar verdade. Não é bom.
Agora, se eu fosse para alloc cada UIActionSheet apenas uma vez por correr e segurar a memória (release Nunca chamada), isso não deve acontecer. Mas eu estou tentando ser conservador aqui. A Apple pretende para o delegado para ser usado desta forma?
Solução
Quando você cria sua UIActionSheet, dar-lhe uma tag:
actionSheet.tag = 1; // or 2 or 3 or ...
Então, em seu método delegado, interruptor baseado no tag para determinar o comportamento dessa folha particular.