#objective-c #ios #cocoa-touch #memory-management
#objective-c #iOS #cocoa-touch #управление памятью
Вопрос:
Я запустил анализатор, и я не уверен, как работает пара функций управления памятью. У меня есть свойство (у него нет пользовательских установщиков или получателей):
@property (nonatomic, retain) NSMutableArray *myArray;
Затем я попытаюсь использовать его позже:
if ([[MyClass sharedDelegate].myArray containsObject:"test"])
В нем говорится: «свойство возвращает объект Objective-C с числом сохранений 1»
Где sharedDelegate
определяется как:
(MyApp*)sharedDelegate
{
return (MyApp*)[[UIApplication sharedApplication] delegate];
}
Я не понимаю этого, так как я не вижу, где находится сохранение? Я думал, что при использовании свойства таким образом используется метод getter, который просто возвращает значение myArray
. Итак, где утечка памяти?
Затем он указывает на
UIGraphicsBeginImagecontextWithOptions(container.bounds.size, YES, 1.0);
Утечка объекта: выделенный объект не упоминается позже в этом пути выполнения и имеет количество сохранений 1
Я также не понимаю этого или как это связано с первой утечкой памяти. Они кажутся не связанными.
Ответ №1:
Что такое средство получения для myArray? @synthesize или пользовательский?
Я думаю, что ошибка также может быть в sharedDelegate . Не сохраняйте при возврате синглтона.
Второй кажется не связанным. Возможно, вы не вызывали UIGraphicsEndImageContext
. Если вы вызываете его в какой-либо другой функции, это может быть нормально. Компилятор ожидает обычного шаблона вызова этих двух функций в одной и той же функции, но это не требуется.
Комментарии:
1. Я добавил метод sharedDelegate, чтобы помочь сузить проблему, поскольку я все еще не вижу ошибки. Спасибо.
Ответ №2:
Вы отметили свойство для возврата сохраненной ссылки.
Комментарии:
1. сохранить означает сохранить при наборе, а не сохранить при получении.