【问题标题】:iPhone - When to release the application delegate?iPhone - 何时释放应用程序委托?
【发布时间】:2012-01-01 21:32:38
【问题描述】:

我有一个在我的所有视图控制器之间使用的对象,所以我将它卡在了应用程序委托中。 (我认为这是正确的地方?)。

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

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

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

【问题讨论】:

    标签: iphone delegates release


    【解决方案1】:

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

    至于将对象放入应用程序委托中只是为了能够从代码的其他部分访问它 - 这是糟糕的 OOP 设计 IMO。

    编辑添加

    我想我最好举个例子

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

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

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

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

    @property(retain) MyObject *object;
    

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

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

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

    【讨论】:

    • 谢谢。我应该在哪里存储这个对象? (我是 iphone 和 MVC 的新手)。我需要初始化这个类的一个对象,多个 viewController 可以与之交互。
    • 我这样做的方法是在每个使用它的视图控制器中为这个对象创建一个属性,然后从其他控制器中设置它。
    • 我有点困惑。我认为属性创建了一个对象并为它设置了访问器方法。这将如何初始化一个可以在 viewController 之间共享的对象?抱歉所有问题。
    • 忽略我之前的评论,我相信我已经解决了 :) 其他感兴趣的人看这里stackoverflow.com/questions/1123920/…
    猜你喜欢
    • 2011-11-08
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多