Subclassed控件未被释放

时间:2011-07-14 08:45:32

标签: iphone ios xcode ipad memory

我们在应用程序中发现了大量内存问题。我们已经将UITextField子类化,并将它们添加到我们的所有主视图中。主视图正在被正确释放,但是我们子类中的dealloc方法永远不会被击中。这是我们的子类:

部首:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "MyEntities.h"
#import "MyControlHelper.h"

@interface MyTextField : UITextField {
    MyControlHelper *myHelper;
    UIView *disabledEffect;
}

@property (nonatomic, retain) MyControlHelper *myHelper;
@property (nonatomic, retain) UIView *disabledEffect;

@end

实现:

#import "MyTextField.h"

@implementation MyTextField

@synthesize myHelper;
@synthesize disabledEffect;

-(id) initWithCoder:(NSCoder *)aDecoder{
    if (self = [super initWithCoder:aDecoder]){
        myHelper = [[MyControlHelper alloc] init];
        [myHelper setBoundTextField:self];
        [myHelper SetupKeyboardListener];
        [self setReturnKeyType:UIReturnKeyDone];
        self.autocorrectionType = FALSE;
        self.delegate = myHelper;
    }

    return self;
}

-(id) init{
    if (self = [super init]){
        myHelper = [[MyControlHelper alloc] init];
        [myHelper setBoundTextField:self];
        [myHelper SetupKeyboardListener];
        [self setReturnKeyType:UIReturnKeyDone];
        self.autocorrectionType = FALSE;
        self.delegate = myHelper;
    }

    return self;
}

-(id)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]){
        myHelper = [[MyControlHelper alloc] init];
        [myHelper setBoundTextField:self];
        [myHelper SetupKeyboardListener];
        [self setReturnKeyType:UIReturnKeyDone];
        self.autocorrectionType = FALSE;
        self.delegate = myHelper;
    }

    return self;

}

-(void)dealloc{
    self.myHelper = nil;
    self.disabledEffect= nil;
    [super dealloc];
}

@end

非常感谢任何帮助。

干杯。

1 个答案:

答案 0 :(得分:0)

您的myHelper参考可能存在问题。您已将其声明为(nonatomic, retain)属性。如果您的MyControlHelper类的MyTextField属性也被保留,那么您正在构建循环引用,并且您的字段保留myHelper,反之亦然。

如果是这种情况,我建议您使用MyControlHelper(nonatomic, assign)内声明文本字段的属性以解决此问题。

也可以发布MyControlHelper的代码。