Richtige Art und Weise zu verwenden UIActionSheet Delegieren? Zeiger Zugeordnet, die identische Speicher
Ich bin mit dem actionSheet variable übergeben actionSheet:didDismissWithButtonIndex: vergleichen Sie die Berufung actionSheet, um eine Liste der UIActionSheet Variablen in meiner Klasse. Dies scheint so zu sein, wie die delegate-Methode wurde entwickelt, zur Unterscheidung zwischen den Ereignissen.
- (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;
}
}
}
Jedes mal, wenn ein UIActionSheet angezeigt wird, ich alloc eine Instanz von UIActionSheet zu einem der class-Variablen, einstellen der Eigenschaften von Anzeige, Darstellung, und lassen Sie es.
Diese reibungslos funktioniert, auf den ersten. Das problem ist, dass nach der Ausführung für eine Weile, schließlich auch UIActionSheet-Pointer (Klasse Variablen actionSheet1 & actionSheet2 im code-Beispiel oben) wird am Ende zeigt auf den gleichen Speicher, je nachdem, was passiert zur Laufzeit, wodurch die beiden if-Anweisungen in der delegate-Methode zu true ausgewertet. Nicht gut.
Nun, wenn ich alloc jeder UIActionSheet nur einmal pro run und halten Sie die memory (nie aufrufen, release), sollte dies nicht passieren. Aber ich bin versucht, konservativ zu sein hier. Hat Apple die Absicht, dass der Delegat auf diese Weise verwendet werden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Ihre UIActionSheet, geben Sie ihm einen tag:
Dann in Ihre Delegat-Methode, wechseln Sie auf der Grundlage der tag, um zu bestimmen, das Verhalten des jeweiligen Blattes.