Я заметил, что использование памяти программой, которую я написал, со временем увеличивается.Инструменты XCode не обнаруживают утечку памяти, но вы можете видеть, как со временем стек кучи увеличивается.
После исследования большая часть использования памяти поступает от объектов пользовательского интерфейса IBOutlet.Интерфейс построен с помощью Interface Builder.
Типичное использование будет выглядеть следующим образом:
header:
@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 * не был должным образом освобожден, и его объем памяти будет расти.
Однако, если я изменю код на: header:
@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 не оставляет ничегопозади
Я не могу понять, почему это будет иметь значение, если у вас есть свойство assign или нет, это просто не имеет смысла!Если только я не очень неправильно понял, что происходит.
Любые объяснения будут приветствоваться ..
Спасибо