Правильный способ использования UIActionSheet Delegate? Указатели сопоставлены с идентичной памятью - PullRequest
1 голос
/ 03 марта 2009

Я использую переменную 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 использовать делегата таким образом?

1 Ответ

6 голосов
/ 03 марта 2009

Когда вы создаете свой UIActionSheet, присвойте ему тег:

actionSheet.tag = 1; // or 2 or 3 or ...

Затем в методе делегата переключитесь на основе тега, чтобы определить поведение этого конкретного листа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...