我们在应用程序中发现了大量内存问题。我们已经将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
非常感谢任何帮助。
干杯。
答案 0 :(得分:0)
您的myHelper参考可能存在问题。您已将其声明为(nonatomic, retain)
属性。如果您的MyControlHelper
类的MyTextField
属性也被保留,那么您正在构建循环引用,并且您的字段保留myHelper,反之亦然。
如果是这种情况,我建议您使用MyControlHelper
在(nonatomic, assign)
内声明文本字段的属性以解决此问题。
也可以发布MyControlHelper的代码。