iPhone - 何时发布应用程序委托?

时间:2011-11-19 12:10:22

标签: iphone delegates release

我有一个在我的所有viewControllers之间使用的对象,所以我把它放在应用程序委托中。 (我认为这是正确的地方?)。

如果viewController中的一个动作触发需要向所述对象发送内容,我将执行以下操作:

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

我有点担心我没有在任何地方发布委托对象,这可以吗?如果我删除注释行[委托发布],它只会崩溃应用程序。

1 个答案:

答案 0 :(得分:4)

您不拥有在此代码段中创建的delegate对象。您尚未使用allocnewcopy创建它。你也没有保留它。因此,发布它不是您的责任。

至于将一个对象放在Application委托中只是为了能够从代码的其他部分访问它 - 这就是糟糕的OOP设计IMO。

已编辑添加

我想我最好举个例子

假设您有一个类MyClass,您想要创建一个可以传递的对象。

您可以在应用程序委托中创建它,您似乎已经在这样做了:

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

然后你创建另一个视图控制器 - 你通常会这样做,除了这个视图控制器有一个属性:

@property(retain) MyObject *object;

然后在创建视图控制器时设置此属性:

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

并且,如果您根据需要将此对象传递给其他视图控制器。