maneira correta de usar UIActionSheet Delegado? Ponteiros mapeado para memória idêntico

StackOverflow https://stackoverflow.com/questions/606733

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top