Правильный способ настройки NSString в синглтоне? - PullRequest
0 голосов
/ 23 июля 2011

В моем синглтоне "Пользователь" у меня есть следующий метод:

- (void)updateUser:(NSDictionary*)userInfo
{
    //uid, fullname, email are ivars
    [uid release];
    uid = [[NSString alloc] initWithString:[userInfo objectForKey:@"id"]];
    [fullName release];
    fullName = [[NSString alloc] initWithFormat:@"%@ %@", [userInfo objectForKey:@"fname"], [userInfo objectForKey:@"lname"]];
    [email release];
    email = [[NSString alloc] initWithString:[userInfo objectForKey:@"email"]];
}

Это правильный способ установки NSStrings? Я пытался использовать объекты автоматического освобождения, но они, кажется, освобождаются слишком рано.

Edit: Неважно, я тупой. Полностью забыл про NSMutableStrings

1 Ответ

2 голосов
/ 23 июля 2011

Вы не предоставили много информации, но именно так вы создаете объекты NSString и присваиваете им, что, возможно, переменные экземпляра в вашем синглтоне. То, что вы, возможно, захотите остерегаться, это то, что вы освобождаете старые объекты перед тем, как назначить новый переменной. Что-то потенциально может пойти очень плохо, если что-то получит доступ к этой переменной между выпуском и назначением. Если вам не требуется поддержка Objective-C до версии 2.0, я бы предложил использовать синтезированные свойства, поскольку они надежно решают такие проблемы с памятью.

Автоматическое освобождение объекта означает, что объект автоматически освобождается на более позднем этапе. Вы можете использовать автоматическое освобождение в ситуациях, когда вы выделяете объект, но у вас нет возможности освободить его самостоятельно, например, в таком удобном методе выделения, как этот:

+ (id)newObject
{
    return [[[MyClass alloc] init] autorelease];
}

В руководствах по управлению памятью говорится, что тот, кто выделяет (или сохраняет) объект, должен также освободить его, когда ему больше не нужен доступ к этому объекту. Поэтому autorelease позволяет методу возвращать вновь созданный объект и говорить, что он больше не нужен. Звонящий должен был бы сохранить его, если ему нужно, чтобы он оставался рядом. Если этого не произойдет, он просто автоматически отключится после того, как вызывающий абонент выйдет из области видимости.

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