我注意到我寫的程序的內存使用量隨着時間的推移而不斷增加。 XCode的儀器顯示沒有內存泄漏,但你可以看到隨着時間的推移棧堆增長..IBOutlet,是否使用會員屬性?內存泄漏?
經過調查,大量的內存使用來自IBOutlet UI對象。界面是用Interface Builder構建的。
典型用法是這樣的:
頭:
@interface HelpViewController : UIViewController <UIWebViewDelegate> {
IBOutlet UIWebView *webView;
IBOutlet UIBarItem *backButton;
IBOutlet UIBarItem *forwardButton;
NSString *URL;
IBOutlet UIActivityIndicatorView *spin;
}
@property (nonatomic, retain) NSString *URL;
而對於用法:
- (void)webViewDidStartLoad:(UIWebView *)mwebView {
backButton.enabled = (webView.canGoBack);
forwardButton.enabled = (webView.canGoForward);
[spin startAnimating];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
backButton.enabled = (webView.canGoBack);
forwardButton.enabled = (webView.canGoForward);
[spin stopAnimating];
}
望着堆棧,你會發現UIActivityIndicatorView *旋轉對象ISN沒有妥善釋放,其內存佔用將繼續增長。
但是,如果我的代碼更改爲: 頭:
@interface HelpViewController : UIViewController <UIWebViewDelegate> {
IBOutlet UIWebView *webView;
IBOutlet UIBarItem *backButton;
IBOutlet UIBarItem *forwardButton;
NSString *URL;
UIActivityIndicatorView *spin;
}
@property (nonatomic, retain) NSString *URL;
@property (nonatomic, assign) IBOutlet UIActivityIndicatorView *spin;
而在代碼中,我做的事:
synthesize spin;
- (void)webViewDidStartLoad:(UIWebView *)mwebView {
backButton.enabled = (webView.canGoBack);
forwardButton.enabled = (webView.canGoForward);
[self.spin startAnimating];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
backButton.enabled = (webView.canGoBack);
forwardButton.enabled = (webView.canGoForward);
[self.spin stopAnimating];
}
僅此而已,沒有別的,然後堆棧不在任何地方增長..和UIActivityIndicatorView對象不會留下任何東西
我不明白爲什麼它會在這裏有一個分配屬性的區別o不,它只是沒有意義!除非我大量誤解了發生的事情。
將受到歡迎任何解釋..
感謝
我認爲建議使用'self.webView = nil; 「而不是你的dealloc或viewDidUnload方法中的'[webView release]'。無論您在@property語句中使用release還是assign,這都做對了。 (只是不要忘記自己的部分,這將是非常糟糕的。) – 2010-07-27 15:44:07
在dealloc中,您應該始終使用[webView發佈]而不是self.webView = nil,以避免清除觸發任何KVC觀察者或任何其他方影響。 – 2010-07-27 17:38:58
對不起,但這並不能解釋爲什麼分配屬性和沒有屬性之間會有所不同。 這兩種情況都會觸發增加的內存使用。 順便說一句,如果使用assign屬性,在dealloc中執行釋放將觸發分段錯誤。如果你在dealloc中發佈一個版本,你需要使用retain屬性 – jyavenard 2010-07-27 19:30:54