Я использую переменную actionSheet, переданную actionSheet: didDismissWithButtonIndex: для сравнения вызывающего actionSheet со списком переменных UIActionSheet в моем классе. Похоже, именно так был разработан метод делегата, чтобы различать события.
- (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;
}
}
}
Каждый раз, когда отображается UIActionSheet, я назначаю экземпляр UIActionSheet одной из переменных класса, задаю свойства отображения, отображаю его и освобождаю его .
Сначала это работает гладко. Проблема в том, что после некоторого времени работы оба указателя UIActionSheet (переменные класса actionSheet1 и actionSheet2 в приведенном выше примере кода) будут указывать на одну и ту же память, в зависимости от того, что происходит во время выполнения, вызывая оба оператора if в делегате. метод для оценки истины. Не хорошо.
Теперь, если бы я выделял каждый лист UIActionSheet только один раз за цикл и держал его в памяти (никогда не вызывал релиз), этого не должно происходить. Но я пытаюсь быть консервативным здесь. Намерена ли Apple использовать делегата таким образом?