Какова наилучшая практика сохранения и освобождения объектов, переданных методам класса?Объект сохраняет поведение методов класса Objective-C
Например, если у вас есть "переменная класса" объявлена как так:
static NSString *_myString = nil
... это правильная вещь, чтобы сделать это:
+ (void)myClassMethod:(NSString *)param {
_myString = param;
}
... который имеет что вызывающему абоненту необходимо поддерживать ненулевое количество удержания на параме, чтобы оно не было выпущено преждевременно. В качестве альтернативы можно было бы сделать это:
+ (void)myClassMethod:(NSString *)param {
[_myString autorelease];
_myString = [param retain];
}
... который имеет недостаток, заключающийся в том, что без соответствующего уровня класса dealloc
вызова будет утечка памяти. Или следует избегать такого рода переменных chicanery, возможно, с помощью одноэлементного класса, который управляет временем жизни таких объектов более традиционным способом?
Apple's docs on creating a singleton instance.
Код, с которым я работаю, является очень гладким (но все же новым) проектом Objective Resource (http://www.iphoneonrails.com/).
Вы задаете неправильный вопрос. Вместо того, чтобы спрашивать, как делать глобальные переменные, вы должны обратиться за помощью, чтобы избавиться от ваших глобальных переменных. И да, даже если вы скрываете это за методом класса (или как Singleton), это по-прежнему глобальная переменная. – Sven