Какой способ инициализировать указатель NSString * в классе - PullRequest
2 голосов
/ 07 апреля 2011

Я использую NSString в своих классах и часто должен копировать строковое значение в другой класс.Но мой вопрос, как я должен инициализировать строку, например, init?(значение - член класса, а следующие вызовы - в init)

value = [NSString stringWithCString:inStrning encoding:NSASCIIStringEncoding];

или

value = [[NSString alloc] initWithCString:inStrning encoding:NSASCIIStringEncoding];

В чем здесь разница?Освобождается ли память, выделенная при первом вызове, после завершения init?Я использую value как assign свойство.Было бы лучше использовать copy?

А как насчет копирования строки, когда я передаю ее в класс с использованием какого-либо метода?Пример:

-(id) initWithObjectTypeStr:(NSString*)inTypeStr
{
    ...
    objectTypeStr = [NSString stringWithString:inType];
    //or 
    objectTypeStr = [[NSString alloc] initWithString:inType];
}

objectTypeStr не определен как свойство, поэтому он имеет свойства по умолчанию (assign Я думаю).

Каков наилучший метод для использования в этом случае?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011
[NSString alloc] initWithString:@""]

Возвращает вашу собственную строку, вам придется ее освободить.

[NSString stringWithString:@""]

Возвращает объект авто-релиза, который будет освобожден и очищен авто-релизом.

Я бы предложил вам прочитать документацию по управлению памятью .

1 голос
/ 07 апреля 2011

Разница в том, что в этом случае objectTypeStr = [NSString stringWithString:inType]; objectTypeStr автоматически высвобождается, и вы не являетесь владельцем объекта.

В то время как в objectTypeStr = [[NSString alloc] initWithString:inType]; вы вступаете во владение объектом, поскольку вы выделяете его с помощьюalloc или new, так что вы обязаны выпускать его после его использования

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