Я прочитал документацию на яблоко, чтобы утверждать, что я правильно занимаюсь управлением памятью, но некоторые поднятые вопросы.Объект объектива-c объектного-c объектива-scope
Вопрос 1:
Они демонстрируют этот фрагмент кода, как неправильно:
in obj implementation:
- (NSString *)method1 {
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];
return string;
}
... later ...
NString* myString = [obj method1];
NSLog("%@", myString);
[myString release];
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.
Поскольку я забочусь о отпуская объект, который был выделен ранее , утечки памяти нет, правильно? Что они означают, «теряя ссылку на него»?
Это неправильно только в отношении рекомендаций по управлению памятью яблока (у вызывающего нет указаний на то, что у них есть возвращенный объект), или это также технически неправильно?
Вопрос 2:
Это о autoreleased объектов доступность:
Пример кода:
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];
Как далеко (или глубоко), после моих вызовов функций будет объект autorelease возвращаемый obj1 будет быть доступным. Что касается документации Apple, «объекты Autorelease будут доступны в пределах их переменных». Должен ли я сохранить его в какой-то момент?
Эта статья может помочь любому, кто ищет больше объяснений по этому вопросу. http://www.asgteach.com/blog/?p=73 –