У меня есть приложение для iPhone, в котором есть несколько методов для сбора информации из Интернета, а затем создается объект, который хранит эту информацию в качестве свойств (скажем, я получу объекты типа x). Поскольку мне могут понадобиться такие объекты из разных точек приложения, я поместил метод для создания одного экземпляра объекта в один файл реализации и назвал этот файл «GetDetails.m» (+ h). В этом методе у меня есть исключительно методы класса * (среди тех, что я создал для создания объекта x), которые создают объект и заполняют его свойства информацией, которую метод собирает из Интернета.
+ (ObjX *)getObjectX:(NSString *key) withParameters:(NSArray *)parameters;
В рамках этого метода мой ObjX заполнен информацией ...
ObjX *objectX = [[ObjX alloc] init];
(...)
objectX.name = gatheredName; // etc
(...)
return objectX;
Таким образом, мой метод класса вызывается в нескольких точках из приложения (между прочим, из отдельного потока):
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ObjX *myObject;
myObject = [GetDetails getObjectX:@"09384f9a" withParameters:nil];
[self performSelectorOnMainThread:@selector(doStuffWithNewObject:) withObject:myObject waitUntilDone:NO];
[pool release];
Я не могу избавиться от ощущения, что этот подход не оптимален. Анализатор Xcode также сообщает мне, что при возврате objectX может возникнуть потенциальная утечка.
Может быть, кто-то может указать мне правильное направление и как мне следует разделить функциональные возможности в целом.
* У него также нет метода init и dealloc, нет иваров, нет методов экземпляра ...
Редактировать
Ладно, очевидно, что большинство не видят релиза для объекта, так что, думаю, я не совсем понял - объект будет выпущен позже после того, как он будет присвоен свойству вида.
Тем не менее, я вижу, что это практика, чтобы вернуть автоматически освобожденный объект. К сожалению, мое приложение падает, когда я это делаю. Может быть, это из-за того, что я выполняю всю эту обработку в отдельном пуле потоков / авто-релизов?
Я протестирую некоторые конфигурации и сообщу, как все прошло.