2011-07-14 15 views
0

我們在應用程序中發現了大量內存問題。我們已經將子類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

下面的答案以任何方式幫助你嗎? – marcus

回答

0

您的myHelper參考可能有問題。您已將其聲明爲(nonatomic, retain)屬性。如果您的MyControlHelper職業有一個屬性,您的MyTextField也被保留,您正在構建循環引用,並且您的字段保留myHelper,反之亦然。

如果是這種情況,我建議您在MyControlHelper範圍內用(nonatomic, assign)來聲明文本字段的屬性以解決循環。

這將有助於發佈MyControlHelper的代碼。

+2

看着代碼,我的第一個嫌疑人會是'boundTextField';) – deanWombourne

+0

@deanWombourne其實這就是我的意思,我只是不知何故錯過了指出來...謝謝(+1)! – marcus

相關問題