2011-03-15 54 views
2

簡單的問題時釋放崩潰......iPhone - 使用一個類屬性

爲什麼這個release崩潰我的應用程序,當我點擊一個按鈕,是在overlayController看法?

OverlayViewController* overlayController = [[OverlayViewController alloc] 
               initWithNibName:@"Overlay" 
                 bundle:nil]; 
    self.picker.cameraOverlayView = overlayController.view; 
    [overlayController release]; 

換言之,如何在此viewDidLoad方法之外調用OverlayViewController方法?

奇怪......我不明白爲什麼我的應用程序工作:-)

+0

發生崩潰時,您的控制檯會說什麼?您是否嘗試過「構建和調試」而不是「構建和運行」以查看發生崩潰時的堆棧跟蹤?您是否在每行代碼之間添加了'NSLog(@「x」);'行來查看哪一行實際上導致崩潰? – 2011-03-15 21:29:33

+0

@ e.James:發佈會讓事情崩潰,但我誤會了原因。參見編輯。控制檯沒有說什麼 – Oliver 2011-03-15 21:31:57

+0

很酷。那麼我的答案實際上會解決它。見下文! ':)' – 2011-03-15 21:38:01

回答

2

好吧,我可以回答第二個問題很容易就夠了:

如何能在OverlayViewController這種方法viewDidLoad方法的外部調用?

一個簡單的屬性添加到您的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

不在設定方法保留看法 屬性

是,但不保留overlayController將在[overlayController release]之後愉快地解除分配。

爲了能夠調用overlayController方法將其保存爲實例變量。無論如何你必須這樣做,以避免崩潰和/或泄漏。

1

你分配overlayController到你的財產的觀點,但後來釋放了整個控制器。如果您已指定這個喜歡

@property(retain)NSArray * myArray; 

的二傳手也只保留看一看cameraOverlayView的財產,如果這真的是保留的看法。