手動のメモリ管理が使用されます。次のコードは正常に実行され、クラッシュは発生しません。しかし、-(void)dealloc
方法はありません。このコードは間違っていますか?追加する必要があり-(void)dealloc
ますか?
MyClass.h
#import <UIKit/UIKit.h>
@interface MyClass : NSObject {
@private
BOOL flag;
UIView *view;
UILabel *label;
UIButton *button;
UITabBar *tabBar;
UIWebView *webView;
UIImageView *imageView;
}
@property (nonatomic, retain) UIView *view;
@property (nonatomic, retain) UILabel *label;
@property (nonatomic, retain) UIButton *button;
@property (nonatomic, retain) UITabBar *tabBar;
@property (nonatomic, retain) UIWebView *webView;
@end
MyClass.m
#import "MyClass.h"
@implementation MyClass
@synthesize view;
@synthesize label;
@synthesize button;
@synthesize tabBar;
@synthesize webView;
- (id)init {
self = [super init];
if (self) {
// Initialization code
// Among other code,
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
}
return self;
}
// Other methods here.
// But -(void)dealloc is not overridden here in the MyClass.m
@end
-(void)dealloc
上記のコードに追加する必要がある場合、次のようにする必要があります。
オーバーライド -(void)dealloc
-(void)dealloc {
[view release];
[label release];
[button release];
[tabBar release];
[webView release];
[super dealloc];
}
更新 1
@synthesize が追加されました。上記を参照してください。
更新 2
これはかなり関連する問題のように思われるため、これを別の投稿に入れませんでした:
上記を参照してください。MyClass.m/.h
プライベート ivar があります (ここでは ivar またはフィールドと呼ぶべきかどうかはわかりません) UIImageView *imageView;
。それにはプロパティがありません。いいえ@synthesize
、そこに初期化が指定されています。また[imageView release];
、-(void)dealloc
?
アップデート 3
ivar をリリースする前に、可用性を確認する必要がありますか? つまり、 の代わりに[view release];
、これを使用します。
if (nil != view) {
[view release];
}