iPhone - Когда выпустить приложение-делегат? - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть объект, который используется между всеми моими viewControllers, поэтому я вставил его в делегат приложения.(Я предполагаю, что это правильное место?).

Если запускается действие внутри viewController, которое должно что-то отправить в указанный объект, я выполняю следующее:

- (IBAction)sliderMoved:(id) sender{
    MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [[delegate myObject] setSpeed:(int)slider];
  //  [delegate release];
}

Я являюсьнемного обеспокоен Я нигде не освобождаю объект делегата, это нормально?Если я удаляю закомментированную строку [делегат релиз], это просто вылетает из приложения.

1 Ответ

4 голосов
/ 19 ноября 2011

Вам не принадлежит объект delegate, созданный в этом фрагменте. Вы не создали его с alloc, new или copy. Вы не сохранили это. Таким образом, вы не обязаны выпускать его.

Что касается помещения объекта в делегат Application только для того, чтобы иметь возможность получить к нему доступ из других частей вашего кода - это плохой IMO-дизайн ООП.

Отредактировано, чтобы добавить

Полагаю, мне лучше привести пример

Предположим, у вас есть класс MyClass, для которого вы хотите создать объект, который вы можете передавать.

Вы создаете его в делегате приложения, который, кажется, вы уже делаете:

MyObject *myObject = [[MyObject alloc] init];

Затем вы создаете другой контроллер представления - что вы обычно делаете, за исключением того, что этот контроллер представления имеет свойство:

@property(retain) MyObject *object;

И затем вы устанавливаете это свойство при создании контроллера представления:

YourViewController *vc = [[YourViewController alloc] init];
vc.object = myObject;

И, если вы передадите этот объект другим контроллерам представления, как вам требуется.

...