我有一个在我的所有viewControllers之间使用的对象,所以我把它放在应用程序委托中。 (我认为这是正确的地方?)。
如果viewController中的一个动作触发需要向所述对象发送内容,我将执行以下操作:
- (IBAction)sliderMoved:(id) sender{
MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[[delegate myObject] setSpeed:(int)slider];
// [delegate release];
}
我有点担心我没有在任何地方发布委托对象,这可以吗?如果我删除注释行[委托发布],它只会崩溃应用程序。
答案 0 :(得分:4)
您不拥有在此代码段中创建的delegate
对象。您尚未使用alloc
,new
或copy
创建它。你也没有保留它。因此,发布它不是您的责任。
至于将一个对象放在Application委托中只是为了能够从代码的其他部分访问它 - 这就是糟糕的OOP设计IMO。
已编辑添加
我想我最好举个例子
假设您有一个类MyClass
,您想要创建一个可以传递的对象。
您可以在应用程序委托中创建它,您似乎已经在这样做了:
MyObject *myObject = [[MyObject alloc] init];
然后你创建另一个视图控制器 - 你通常会这样做,除了这个视图控制器有一个属性:
@property(retain) MyObject *object;
然后在创建视图控制器时设置此属性:
YourViewController *vc = [[YourViewController alloc] init];
vc.object = myObject;
并且,如果您根据需要将此对象传递给其他视图控制器。