Потенциальная утечка памяти с помощью пользовательского метода, не имеет смысла - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть этот метод:

-(NSString *)scrambleWordGenerator: (NSUInteger)length {
    NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
    for (int i = 0; i < length; i++) {
        NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
        NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
        [scrambledWord insertString:randomCharacter atIndex:i];
    }
    NSString *finalWord = [[NSString alloc] initWithString:scrambledWord];
    [scrambledWord release];
    return finalWord;
}

Он работает, на самом деле плавно, однако при использовании функции «Анализ» в Xcode он говорит, что finalWord имеет потенциальную утечку памяти.* Я думал, что при создании NSString с префаб init методом строка будет автоматически освобождена.Что мне не хватает?Ниже приведен скриншот ошибки:

enter image description here

edit

Метод теперь выглядит так:

-(NSString *)scrambleWordGenerator: (NSUInteger)length {
    NSMutableString *scrambledWord = [[NSMutableString alloc] initWithString:@""];
    for (int i = 0; i < length; i++) {
        NSUInteger randomIndex = arc4random() % [self.arrayOfCharacters count];
        NSString *randomCharacter = [NSString stringWithString:[self.arrayOfCharacters objectAtIndex:randomIndex]];
        [scrambledWord insertString:randomCharacter atIndex:i];
    }
    NSString *finalWord = [NSString stringWithString:scrambledWord];
    [scrambledWord release];
    return finalWord;
}

И больше ошибок нет!

1 Ответ

3 голосов
/ 04 февраля 2012

Нет, в тот момент, когда вы используете alloc, вы несете ответственность за его освобождение - либо release, либо путем перемещения его в пул автоматического выпуска через autorelease.

Это будет в пуле автоматического выпуска, если вы используете [NSString stringWithString:].

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