Подклассы управления не выпускаются - PullRequest
0 голосов
/ 14 июля 2011

Мы обнаружили большую проблему с памятью в нашем приложении.Мы создали подкласс 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 голосов
/ 14 июля 2011

Возможно, у вас проблема с ссылкой на myHelper. Вы объявили его как (nonatomic, retain) свойство. Если у вашего MyControlHelper класса есть свойство для вашего MyTextField, которое также сохраняется, вы создаете циклическую ссылку, а ваше поле сохраняет myHelper и наоборот.

Если это так, я предлагаю вам объявить свойство для текстового поля в MyControlHelper с помощью (nonatomic, assign) для разрешения цикла.

Это также поможет опубликовать код для MyControlHelper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...