Как отслеживать прикосновения к согласованному способу между TouchesBegan: и коснуться :?

в некотором обслуживании некоторых мультитач" Рисунок на экране ", Я встретил ошибку по отношению к тому, как ссылки на прикосновение к экземплярам следует устанавливать между TouchesBegan: CaseEvent: TouchSmood: CaseEvent: и коснуться:

Код использует экземпляр Nsdictionary для хранения ссылок на ощупь в TouchesBegan: whiteevent :, следующий:

for (UITouch *touch in touches]) {
    NSValue *touchValue = [NSValue valueWithPointer:touch];
    NSString *key = [NSString stringWithFormat:@"%@", touchValue];
    [myTouches setValue:squiggle forKey:key];
}

и извлекает их в заземленные: возникает: с этим способом:

for (UITouch *touch in touches) {
    NSValue *touchValue = [NSValue valueWithPointer:touch];
    NSString *key = [NSString stringWithFormat:@"%@", touchValue];
    NSObject *valueFromDictionary = [myTouches valueForKey:key];
    [myTouches removeObjectForKey:key];
}

в этом последнем битовом коде, стоимость которого происходит Иногда быть ноль, так как ключ не известен словарным словарем. Измененно я имею в виду около 1% времени.

Теперь контекст устанавливается, мои вопросы:

  1. Любая идея, почему этот код багги? Я не уверен, почему это не работает, особенно из-за очень низкой частоты ошибок

  2. Некоторые документы из Apple утверждают, что это хорошая идея использовать адреса объектов UITouch в качестве клавиш : но Это означает использование объектов NsValue *, а не NSString * объектов ( и, следовательно, использование CFDictionAryref, а затем Nsdictionary, из-за того, что UITouch не реализует протокол копирования). Как хранить представление NSString адрес, а не самого nsValue, не может быть легким решением, чтобы иметь возможность использовать Nsdictionary? Обновление: Apple обновила страницу и удалила пример хранения UITouch через Nsstring и просто упоминает решение не-объекта-вообще-все решения CFDIctionaryref.

Я боюсь, что я далеко от C и указателей на вещи и нуждаетесь в помощи понять причину, в этом коде есть ошибка.

9
задан Dirty Henry 6 October 2011 в 23:14
поделиться