iphone应用程序开发中的内存问题
我正在开发一个iphone应用程序,它使用非常简单的界面,并在后端处理数据库。我也在启用ARC选项。 我的viewDidLoad方法如下:iphone应用程序开发中的内存问题,iphone,xcode,memory,dealloc,viewdidunload,Iphone,Xcode,Memory,Dealloc,Viewdidunload,我正在开发一个iphone应用程序,它使用非常简单的界面,并在后端处理数据库。我也在启用ARC选项。 我的viewDidLoad方法如下: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. /*********needed to implement scroll view********/ svScroll.f
- (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];
}
@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;
My.h文件包含IBOutlets,其定义如下:
- (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];
}
@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;
@接口
创建库存项目:UIViewController
{
IBOUTLE UIScrollView*svScroll;
IBOutlet UITextField*tfItemName;
IBUILabel*lbUnitsOfMeasure;
IBUI按钮*btSelectUnitsMeasure;
IBUI按钮*btDate;
IBOUNINAVIGATIONBAR*btBack;
IBOUTLE UITextField*TF数量;
IBOutlet UITextField*tfCostUnit;
IBOutlet UITextField*tfValue;
IBUIButton*btCreate;
NSMUTABLEARRY*阵列的测量值;
UIButton*btKeyboardDone;
UIView*附件视图;
UITextField*txtActiveField;
UIButton*BT减号;
选择器视图*调用选择器视图;
日期选择器*调用日期选择器;
}
@属性(非原子,保留)UIButton*BT减号;
@属性(非原子,保留)UITextField*txtActiveField;
@属性(非原子,保留)UIButton*btKeyboardDone;
@属性(非原子,保留)UIView*accessoryView;
@属性(非原子,保留)IBUINAVIGATIONBAR*btBack;
@属性(非原子,保留)IBOutlet UIScrollView*svScroll;
@属性(非原子,保留)IBOutlet UITextField*tfItemName;
@属性(非原子,保留)IBUILabel*lbUnitsOfMeasure;
@属性(非原子,保留)IBUIButton*btSelectUnitsMeasure;
@属性(非原子,保留)IBUIButton*btDate;
@属性(非原子,保留)IBOutlet UITextField*tfQuantity;
@属性(非原子,保留)IBOutlet UITextField*tfCostUnit;
@属性(非原子,保留)IBOutlet UITextField*tfValue;
@属性(非原子,保留)IBUIButton*btCreate;
-(iAction)btSelectUnitsMeasure:(id)发送方;
-(iAction)btDate:(id)发件人;
-(iAction)btCreate:(id)发送方;
-(iAction)隐藏板:(id)发送方;
-(iAction)showAlerView:(NSString*)消息;
-(iAction)btBack:(id)发送方;
请告诉我在dealloc和viewDidUnloadMethod中需要做什么?
我正在使用ARC选项。此外,当我在模拟器中运行带有内存分配和泄漏配置文件选项的应用程序时,它有时会显示内存级别低警告和内存级别正常。造成这种情况的原因是什么?如果您使用的是ARC,那么您只需要一个dealloc,它将使该类实例中所有基于对象的成员无效 所有应用都会偶尔收到内存警告。您可以选择通过取消稍后可以初始化的成员来响应 在我的应用程序中,大多数可视成员(UIViews等)都会在ViewDidDemouse方法中出现和释放。这样一来,一次只能初始化2个视图(在视图控制器转换期间)的成员,并且当该视图是唯一可见的视图时,只能初始化1个视图
因此,我得到的内存警告很少,除了在操作大图像等时。我是否需要在dealloc方法中调用[super dealloc]?如果您使用的是ARC,则不需要调用。您所说的“攻击性释放”是什么意思?我如何在ARC中释放?请解释一下?此外,在圆弧中,哪些所有对象都应设置为零?请查看代码片段并告诉我对象名称。激进意味着提前发布。在ARC中,设置对对象的引用可能不需要尽早设置为“nil”。如果你懒得及时初始化东西,你也可以提前发布。这使您的应用程序能够满足内存需求。