Как освободить набор символов? - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть вопрос по поводу текстового поля.Я пишу, чтобы позволить пользователю только ввести номер в текстовое поле.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    static NSCharacterSet *charSet = nil;
    if(!charSet) {
        charSet = [[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet] retain];
    }
    NSRange location = [string rangeOfCharacterFromSet:charSet];
    return (location.location == NSNotFound);
}

Выше приведен код, теперь он работает нормально, единственное, как я могу выпустить charSet, так как я его уже сохранил.Если я отпущу его здесь, он рухнет.Пожалуйста, напишите мне путь.Или все еще нормально, если я сохраню это так?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Вы никогда не должны были сохранять charSet в первую очередь. Он автоматически высвобождается, когда приходит к вам: он живет достаточно долго для запуска остальной части кода, а затем сам по себе исчезает.

Конечно, если вы используете iOS 5 и ARC, вам никогда не придется беспокоиться о сохранении и выпуске снова ...

РЕДАКТИРОВАТЬ: О, я вижу, в чем проблема, вы назначаете статический. Хорошо, тогда просто сохраните это, как вы делаете, и позвольте этому течь позже. Либо это, либо использовать переменную экземпляра, и таким образом вы можете управлять памятью. Извините за неправильный ответ в первый раз, но лучше признать, что я читаю небрежно ...:)

ДРУГОЕ РЕДАКТИРОВАНИЕ: Но почему вы присваиваете статику? Вы действительно думаете, что это экономит вам много времени? Разве это не случай "преждевременной оптимизации"? Компьютеры действительно быстрые, намного быстрее, чем пользователь может печатать; Я думаю, что ваше устройство может очень счастливо рассчитать [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet] каждый раз при выполнении этой процедуры, не замедляя процесс.

0 голосов
/ 13 декабря 2011

Если все, что вам нужно, это подтвердить, что пользователь ввел цифры, то вы можете либо

- (BOOL)textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
replacementString:(NSString *)string
{
    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]] length]) {
        return NO;
    }
    return YES;
}   

, либо просто сделать клавиатуру цифровой панелью.

Ваш метод проверяет только то, чтовход имеет номер, а не то, что он состоит только из цифр.Если вы не отключили функцию копирования / вставки, вам необходимо проверить, что все введенные данные верны.

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