Управление памятью Objective-C: как освободить память при возврате выделенного экземпляра? - PullRequest
0 голосов
/ 07 сентября 2010

Как вы освобождаете память в этой ситуации?Вам нужно?

- (NSString *) whatHappensHere {
 NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"];
     // ....
        // more code ...
        // ...
 return mutableString;
}

Ответы [ 2 ]

3 голосов
/ 07 сентября 2010

с авто-выпуском

- (NSString *) whatHappensHere {
 NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"];

[mutableString autorelease];
 return mutableString;
}
0 голосов
/ 08 сентября 2010

Как сказал willcodejavaforfood, соглашение заключается в том, что любой вновь выделенный объект, возвращаемый методом, должен быть autorelease 'd перед возвращением.Это сообщает среде выполнения Objective C, что если никто не вступит во владение им с retain до (в большинстве случаев) текущей итерации цикла событий приложения, он должен быть освобожден.

Если он используется только локальнов вызывающей функции или возврате в стек, это прекрасно работает и рано или поздно освобождается.Если в конечном итоге кто-то захочет сохранить его, он должен retain это, и поэтому он будет знать, что ему придется release это позже.

(На самом деле, большинство не * 1009конструкторы утилит для базовых классов ObjC, таких как строки и т. д., делают это или, по крайней мере, что-то функционально эквивалентное.)

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