Распределение строк и переменные экземпляра - PullRequest
0 голосов
/ 20 марта 2011

Я довольно новичок в программировании и задаче C, и мне трудно понять концепцию распределения, управления памятью и того, как они связаны с переменными экземпляра.Я создал категорию для NSString с именем isUrl, чтобы проверить префикс «http: // в строке».

Оттуда я хотел проверить это на строке. Однако, учитывая эту ситуацию, я не смогвыяснить, нужно ли мне: 1) объявить новую строку как переменную экземпляра с помощью @property для синтеза средств доступа 2) выделить новую строку в моей реализации 3) установить мою переменную и выделить ее

Что будетРазница между этими методами и почему я, возможно, хотел бы использовать один над другим? -

В качестве примечания, я работаю с книгой О'Рейли и пытался найти ответы в Интернете, нопока что мне не повезло. Кажется, я нашел примеры всего, но объяснить, как и почему они используются, сложнее.

1) NSString* string = [[[NSString alloc]init]autorelease];<br> string = @ "http://www.google.com";
if ( [string isUrl]) {<br> NSLog(@"Caption is a URL");<br> NSLog(@"URL %@",string);<br> string = nil;

2) NSString* string = @"http://www.googl.com";<br> [string retain];<br> if ( [string isUrl]) {<br> NSLog(@"Caption is a URL");<br> NSLog(@"URL %@",string);<br> string = nil;

3) Примерно так ...
@synthesize string;<br> string.name = "http://www.google.com";<br> if ( [string.name isUrl]) {<br> NSLog(@"Caption is a URL");<br> NSLog(@"URL %@",string);<br> string = nil;

1 Ответ

0 голосов
/ 20 марта 2011

Строковые литералы не нужно освобождать или сохранять.

Свойства следует использовать всякий раз, когда значение, связанное с объектом, должно существовать вне одного вызова функции, и вам не нужна ваша программа длякомпилировать под 10.4 или ранее.При использовании nil кажется, что вам не нужна эта строка для сохранения, поэтому вы должны использовать только локальную переменную.Вот для чего нужны локальные переменные.

NSString* string = @"http://www.google.com";
if ( [string isUrl]) {
    NSLog(@"Caption is a URL");
    NSLog(@"URL %@",string);
}

Apple Правила управления памятью Objective-C довольно просты.На самом деле есть только одно правило с несколькими следствиями.


NSString* string = [[[NSString alloc]init]autorelease];
string = @"http://www.google.com";

Вам не нужно выделять объект перед назначением другого объекта той же переменной.Первый объект просто освобождается и не имеет смысла.

string.name = "http://www.google.com";

"" обозначает строку C.Для строки NSSt необходимо использовать символ at.Выше должно быть

string.name = @"http://www.google.com";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...