【问题标题】:Subclassed controls not being released未发布子类控件
【发布时间】:2011-07-14 08:45:32
【问题描述】:

我们在应用程序中发现了一个大内存问题。我们对 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

任何帮助将不胜感激。

干杯。

【问题讨论】:

  • 下面的答案对您有任何帮助吗?

标签: iphone ios xcode ipad memory


【解决方案1】:

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

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

也将有助于发布 MyControlHelper 的代码。

【讨论】:

  • 查看代码,我的第一个嫌疑人是boundTextField ;)
  • @deanWombourne 实际上这就是我的意思,我只是不知何故错过了指出它......谢谢(+1)!
猜你喜欢
  • 2013-08-19
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多