проблемы при выпуске объекта - PullRequest
0 голосов
/ 23 ноября 2010

У меня есть некоторые проблемы, когда и какой объект должен быть освобожден

Вы можете сказать, что мои знания к этому меньше

У меня есть следующие условия, пожалуйста, предложите мне ответ соответственно

  • ситуационно-1

NSMutableString * str = [[NSMutableString alloc] initWithFormat: @ "Hello World!"];
NSMutableArray * array = [[NSMutableArray alloc] init];
[массив addObject: str];

Теперь, когда я попытался освободить str, использование массива повлияло на будущее ... и наоборот
Скажи мне, я могу выпустить оба?

  • ситуационно-2

NSMutableString * str = [[NSMutableString alloc] init]; str = @ "Hello World!";
str = [self getData]; // вызов метода, который возвращает строку
[str release];

Я думаю, что я создаю утечку памяти здесь (как ее решить?)

пожалуйста, очистите эти ситуации

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

в первой ситуации вам нужно будет вызвать [str release]; после добавления его в массив, например:

NSMutableString *str = [[NSMutableString alloc] initWithString:@"Hello World!"];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:str];
[str release];

Таким образом, array содержит единственный вызов сохранения в строке. Как только вы выпустите array позже, у вас не возникнет проблем с утечкой памяти.

Я немного озадачен второй ситуацией. str вот указатель. Кажется, вы назначаете три разных объекта одному и тому же указателю:

NSMutableString *str = [[NSMutableString alloc] init]; //first object
str=@"Hello World !"; //second object
str=[self getData]; //third object

к тому времени, когда вы вызываете [str release], вы создали утечку памяти, потому что потеряли первую изменяемую строку. Во второй раз, когда вы позвонили str =, вы потеряли любой способ доступа к этому первому NSMutableString.

Предполагая, что вы хотите объединить все это (поскольку вы выбрали NSMutableString), вы можете попробовать это:

NSMutableString *str = [[NSMutableString alloc] init]; //first object
[str appendString:@"Hello World!"];
[str appendString:[self getData]];
[str release];

Если метод [self getData] возвращает автоматически освобожденную строку, все будет в порядке. Если getData возвращает оставшуюся строку (если вы использовали alloc и init), вам нужно будет присвоить ее промежуточному указателю и отпустить после добавления в str.

0 голосов
/ 23 ноября 2010

Что необходимо для создания NSMutableString Вы можете напрямую использовать NSString для этой цели

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