NSString Release - PullRequest
       16

NSString Release

1 голос
/ 02 января 2012

У меня есть этот строковый код, и у меня возникают проблемы при попытке освободить память, я понял, что инициализируются только те, кто его выпускает, и не является авто-релизом, но у меня были проблемы со строкой «конец» и с выпуском nSum.1001 *

NSString *urlBase = [[NSString alloc] initWithFormat:@"http://service.svc/"];
NSString *op = [[NSString alloc] initWithFormat:@"op1"];
NSString * final = [urlBase stringByAppendingFormat:op];
NSString * nSum = sumTextfield.text;
final = [final stringByAppendingFormat:nSum];

//release

[ urlBase release ];
[ op release ];
//[final release]; error
//[final autorelease]; error

спасибо за помощь.

ОБНОВЛЕНИЕ:

- (IBAction)mostrarOpciones {
 // code (UP)
}

Ответы [ 2 ]

4 голосов
/ 02 января 2012

Если вы создаете объект, используя метод, который начинается с init, new, copy или mutableCopy, то вы владеете этим объектом и несете ответственность за его освобождение (или автоматическое высвобождение) после завершения работы с ним. Если вы создаете объект, используя любой другой метод, этот объект автоматически освобождается, и вам не нужно его освобождать. В этом случае вам действительно нужно сохранить объект, если вы хотите сохранить его. У Apple есть Руководство по программированию управления памятью , которое включает все эти правила.

Код, который вы разместили, на самом деле правильный. Вам нужно освободить urlBase и op, потому что вы создали их, используя метод, начинающийся с init (в данном случае initWithFormat:). final и nSum уже автоматически выпущены для вас. final был создан методом, который не начинается с init, new, copy или mutableCopy (в данном случае, фабричный метод stringByAppendingFormat:). nSum был возвращен методом с именем text, и вы можете предположить, что sumTextField «владеет» им или автоматически выпустил его перед возвратом вам, поэтому вы не несете ответственности за его освобождение.

0 голосов
/ 24 января 2013

вы не можете освободить NSString, которую вы не выделяли. Поскольку ваши две переменные не распределены, их не нужно освобождать.

...