简单的问题......
当我点击overlayController视图上的按钮时,为什么这个release
会崩溃我的应用?
OverlayViewController* overlayController = [[OverlayViewController alloc]
initWithNibName:@"Overlay"
bundle:nil];
self.picker.cameraOverlayView = overlayController.view;
[overlayController release];
换句话说,如何在此viewDidLoad方法之外调用OverlayViewController方法?
奇怪......我不明白为什么我的应用程序正在运行: - )
答案 0 :(得分:2)
好吧,我可以很容易地回答第二个问题:
如何在此viewDidLoad方法之外调用OverlayViewController方法?
只需在viewController中添加一个属性:
<强> MyViewController.h:强>
@interface MyViewController : UIViewController {
OverlayViewController* overlayController;
}
@property (nonatomic, retain) OverlayViewController* overlayController;
@end
<强> MyViewController.m:强>
@implementation MyViewController
@synthesize overlayController;
- (void)viewDidLoad {
OverlayViewController* ovc = [[OverlayViewController alloc]
initWithNibName:@"Overlay" bundle:nil];
self.overlayController = ovc;
[ovc release];
self.picker.cameraOverlayView = self.overlayController.view;
}
- (void)someOtherMethod {
[self.overlayController someMethod];
}
- (void)dealloc {
[overlayController release];
[super dealloc];
}
@end
答案 1 :(得分:1)
set方法是否保留视图 属性
是的,但它不会保留overlayController
,[overlayController release]
之后会很快取消分配。
为了能够调用overlayController
方法,请将其保存在实例变量中。无论如何,你必须这样做,以避免崩溃和/或泄漏。
答案 2 :(得分:1)
您将overlayController的视图分配给您的属性,但之后释放整个控制器。只有在您指定了
之后,setter才会保留@property(retain)NSArray * myArray;
如果这确实保留了视图,请查看cameraOverlayView的属性。