对不起我是新手。这是否超过释放OverlayviewController?因为它是自动释放并在dealloc再次释放。或者没关系?谢谢你帮忙。
@implementation ViewController
@synthesize imageView, overlayViewController, cameraBtn;
#pragma mark -
#pragma mark View Controller
- (void)viewDidLoad
{
[super viewDidLoad];
// Sharekit Logout button
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:SHKLocalizedString(@"Logout") style:UIBarButtonItemStyleBordered target:self action:@selector(logout)] autorelease];
self.overlayViewController =
[[[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil] autorelease];
// as a delegate we will be notified when pictures are taken and when to dismiss the image picker
self.overlayViewController.delegate = self;
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
cameraBtn.hidden = YES;
}
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
- (void)viewDidUnload
{
self.imageView = nil;
self.overlayViewController = nil;
}
- (void)dealloc
{
[imageView release];
[overlayViewController release];
[super dealloc];
}
答案 0 :(得分:0)
缺少的一部分是属性overlayViewController
的定义。如果它有retain
选项,那么一切都很好。
在你的viewDidLoad
,你的分配然后自动释放,所以这是平衡的。但是你也将它分配给属性 overlayViewController
,如果它有retain
选项(在这种情况下它应该),那么你的调用将保留分配的OverlayViewController。这正是你想要的。
在dealloc
中,您将发布支持该属性的变量。这是正确的,您的控制器将正确释放。但是,它会更早发布:在viewDidUnload
中,您将nil
分配给该属性。这将释放控制器。因此,当调用dealloc
时,overlayViewController
变量很可能是nil(但它也可能仍包含控制器,具体取决于对象的使用方式,即取决于{{1}是否被调用。
因此,如果属性viewDidUnload
具有overlayViewController
选项,则此处显示的代码是正确的。