1

私は非常にシンプルなインターフェースを使用し、バックエンドでデータベース処理を行うiphoneアプリケーションを開発しています。ARCOPTIONも有効にしています。私のviewDidLoadメソッドは次のとおりです。

    - (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が含まれています。

    @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;

DeallocとviewDidUnloadMethodで何をする必要があるか教えてください。ARCOPTIONを使用しています。
また、メモリ割り当てとリークのためにシミュレータでプロファイルオプションを使用してアプリを実行すると、MEMORY LEVELLOWWARNINGとMEMORYLEVELNORMALが表示されることがあります。これの原因は何ですか?

4

1 に答える 1

0

ARC を使用している場合は、そのクラス インスタンス内のすべてのオブジェクト ベースのメンバーを無効にする dealloc が必要です。

すべてのアプリは、時々メモリ警告を受け取ります。後で遅延初期化できるメンバーを無効にすることで応答することを選択できます。

私のアプリでは、ほとんどのビジュアル メンバー (UIView など) を viewWillAppear で遅延初期化し、viewDidDisappear メソッドで積極的に解放します。このように、2 つのビューのみが一度にメンバーを初期化でき (ビュー コントローラーの遷移中)、そのビューが唯一の可視ビューである場合は 1 つのビューのみです。

その結果、大きな画像などを操作する場合を除いて、メモリに関する警告はほとんど表示されません。

于 2012-09-06T05:26:12.333 に答える