2012-09-06 3 views
1

매우 간단한 인터페이스를 사용하고 백엔드에서 데이터베이스 처리를 수행하는 iphone 애플리케이션을 개발 중입니다. 나는 ARC OPTION도 가능하게하고있다. 다음과 같이 내있는 viewDidLoad 방법은 다음과 같습니다iphone 앱 개발 관련 메모리 문제

@interface 
    Create_Inventory_Item:UIViewController<Date_Picker_Protocol,Picker_View_Protocol,UITextFieldDelegate> 
    { 
     IBOutlet UIScrollView *svScroll; 
     IBOutlet UITextField *tfItemName; 

IBOutlet UILabel *lbUnitsOfMeasure; 
IBOutlet UIButton *btSelectUnitsMeasure; 

IBOutlet UIButton *btDate; 
IBOutlet UINavigationBar *btBack; 

IBOutlet UITextField *tfQuantity; 
IBOutlet UITextField *tfCostUnit; 
IBOutlet UITextField *tfValue; 

IBOutlet UIButton *btCreate; 
NSMutableArray *arrayUnitsMeasure; 

UIButton *btKeyboardDone; 
UIView *accessoryView; 
UITextField *txtActiveField; 
UIButton *btMinus; 
Picker_View *callPickerView; 
Date_Picker *callDatePicker; 
    } 

    @property(nonatomic,retain) UIButton *btMinus; 
    @property(nonatomic,retain)UITextField *txtActiveField; 
    @property(nonatomic,retain) UIButton *btKeyboardDone; 
    @property(nonatomic,retain)UIView *accessoryView; 
    @property(nonatomic,retain) IBOutlet UINavigationBar *btBack; 
    @property(nonatomic,retain)IBOutlet UIScrollView *svScroll; 
    @property(nonatomic,retain)IBOutlet UITextField *tfItemName; 
    @property(nonatomic,retain)IBOutlet UILabel *lbUnitsOfMeasure; 
    @property(nonatomic,retain)IBOutlet UIButton *btSelectUnitsMeasure; 
    @property(nonatomic,retain) IBOutlet UIButton *btDate; 
    @property(nonatomic,retain) IBOutlet UITextField *tfQuantity; 
    @property(nonatomic,retain) IBOutlet UITextField *tfCostUnit; 
    @property(nonatomic,retain)IBOutlet UITextField *tfValue; 
    @property(nonatomic,retain) IBOutlet UIButton *btCreate; 

    -(IBAction)btSelectUnitsMeasure:(id)sender; 
    -(IBAction)btDate:(id)sender; 
    -(IBAction)btCreate:(id)sender; 
    -(IBAction) hideKeyboard:(id)sender; 
    -(IBAction)showAlerView:(NSString *)message; 
    -(IBAction)btBack:(id)sender; 

은 내가 무엇을 할당 해제 및 viewDidUnloadMethod에 어떻게해야합니까 알려주세요 :

- (void)viewDidLoad 
    { 
    [super viewDidLoad]; 
// Do any additional setup after loading the view from its nib. 

/*********needed to implement scroll view********/ 
svScroll.frame = CGRectMake(0, 0, 320, 460); 
svScroll.contentSize = CGSizeMake(320, 800); 
/*********************************************/ 

//[DataHelper openDbCompany]; 

NSString *date=[DataHelper getFinYr]; 

[btDate setTitle:[DataHelper dateSqliteToNormal:date] forState:UIControlStateNormal]; 

arrayUnitsMeasure=[[NSMutableArray alloc]initWithArray:[DataHelper getUnitsOfMeasure]]; 

//[DataHelper closeDbCompany]; 

tfValue.keyboardType=UIKeyboardTypeDecimalPad; 
tfQuantity.keyboardType=UIKeyboardTypeDecimalPad; 
tfCostUnit.keyboardType=UIKeyboardTypeDecimalPad; 

//catching the notification for text field value change. 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFieldChanged:) name:UITextFieldTextDidChangeNotification object:tfQuantity]; 

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFieldChanged:) name:UITextFieldTextDidChangeNotification object:tfCostUnit]; 

    } 

내 .H 파일에 포함 된 포함되어 다음과 같이 정의된다 IBOutlets? ARC OPTION을 사용하고 있습니다.
또한 메모리 할당 및 누출에 대한 시뮬레이터의 프로필 옵션을 사용하여 앱을 실행할 때 때때로 메모리 레벨 낮음 경고 및 메모리 레벨 보통을 표시합니다. 이것의 원인은 무엇입니까?

답변

0

ARC를 사용하는 경우 해당 클래스 인스턴스의 모든 개체 기반 멤버를 무효화하는 dealloc 만 있으면됩니다.

모든 앱에서 잠시 동안 메모리 경고를받습니다. 나중에 게으르게 초기화 될 수있는 멤버를 무효화하여 응답하도록 선택할 수 있습니다.

내 응용 프로그램에서는 viewWillAppear에서 대부분의 시각적 멤버 (UIViews 등)를 게으르게 초기화하고 적극적으로 viewDidDisappear 메서드에서 해제합니다. 이렇게하면보기 컨트롤러 전환 중에 한 번에 2 개의보기 만 구성원을 초기화 할 수 있으며 해당보기가 유일한보기 일 때만 한보기가 가능합니다.

큰 이미지 등을 조작 할 때를 제외하고는 거의 메모리 경고가 표시되지 않습니다.

+0

dealloc 메서드에서 [super dealloc]을 호출해야합니까 ?? –

+0

ARC를 사용하는 경우에는 필요하지 않습니다. –

+0

'응징 해제'란 무엇을 의미합니까? ARC에서 어떻게 해제합니까? 설명 해주십시오? 또한 ARC에서 모든 객체를 nil로 설정해야합니까? 코드 스 니펫을보고 개체 이름을 알려주십시오. –