Я прочитал документацию Apple, чтобы утверждать, что я правильно управлял памятью, но возникли некоторые вопросы.
Вопрос 1:
Они показывают этот фрагмент кода как неправильный:
in obj implementation:
- (NSString *)method1 {
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];
return string;
}
... later ...
NString* myString = [obj method1];
NSLog("%@", myString);
[myString release];
Apple Doc :
You own the string returned by alloc, but lose the reference to it before you get a chance to relinquish ownership. Following the memory management rules, this would result in a memory leak, since the caller has no indication that they own the returned object.
Поскольку я занимаюсь освобождением объекта, который был выделен ранее, утечки памяти нет, верно?Что они подразумевают под «потерять ссылку на это»?
Это неправильно только в отношении рекомендаций Apple по управлению памятью (вызывающий не имеет никаких признаков того, что они владеют возвращаемым объектом) или это также технически неправильно?
Вопрос 2:
Это касается доступности объектов с автоматическим освобождением:
Пример кода:
in obj1 implementation:
- (NSString *)methodA {
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];
return [string autorelease];
}
in obj2 implementation:
- (NSString *)methodB:(NSString *)inputString {
NSLog("%@",inputString)
//*other call of methods with arg inputString*//
}
... later ...
NString* myString = [obj1 methodA];
[obj2 method2:myString];
Насколько далеко (или глубже) после вызовов моих функций будет доступен объект автоматического освобождения, возвращаемый obj1.Что касается документации Apple, «объекты автоматического выпуска будут доступны в пределах их переменной области».Должен ли я сохранить его в какой-то момент?