Потенциальная Утечка Объекта Ошибка - PullRequest
0 голосов
/ 03 сентября 2010

Я получаю потенциально утечку объекта из Static Analyzer для этой строки:

strCleanPhone = [[[[strPhone stringByReplacingOccurrencesOfString:@" " withString:@""] 
                           stringByReplacingOccurrencesOfString:@"(" withString:@""] 
                          stringByReplacingOccurrencesOfString:@")" withString:@""] 
                         stringByReplacingOccurrencesOfString:@"-" withString:@""];

Во-первых, это предпочтительный способ вырезать нечисловые символы из строки телефонного номера?

Во-вторых, вы можете объяснить, почему это был протекший объект?

Ответы [ 4 ]

2 голосов
/ 03 сентября 2010

Строки, созданные stringByReplacingOccurrencesOfString, автоматически высвобождаются, поэтому они не пропускаются.Если есть утечка, это связано с strPhone и strCleanPhone.

Например, если strCleanPhone является @property с опцией сохранения, и в настоящее время не ноль, то ваш код утечкиЭто.Чтобы использовать код выпуска / сохранения, сгенерированный синтезом, вы должны использовать синтаксис свойства: self.strCleanPhone = ....Использование только strCleanPhone = ... устанавливает переменную экземпляра и не освобождает объект, на который он указывал.

1 голос
/ 03 сентября 2010

Убедитесь, что вы расширили предупреждение анализатора, щелкнув текст предупреждения в представлении источника!Скорее всего, он указывает на то, где переменная используется в последний раз;если вы развернете предупреждение, вы увидите кучу стрелок, указывающих поток кода, который поможет указать, где вы разместили свой потенциально протекший объект.*

1 голос
/ 03 сентября 2010

Если вы хотите удалить символы, которые не являются числами.

NSString *strPhone = @"(555) 444-3333";
NSMutableString *strCleanPhone = [NSMutableString string];
for (int i=0;i<[str length];i++)
{
    unichar ch = [str characterAtIndex:i];
    if (isnumber(ch)) [strCleanPhone appendFormat:@"%c", ch];
}

Но я предлагаю изучить регулярные выражения.

1 голос
/ 03 сентября 2010

Если вы используете iOS 4.0+, вы можете использовать новый объект NSRegularExpression, чтобы сделать это немного более элегантно.не течетОн просто создает четыре автоматически выпущенных строковых объекта.

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