2011-02-09 50 views
1

我一直在研究一个应用程序,并且我读的这本书说要把这些语句放到viewDidUnload和dealloc方法中。还有什么其他信息应该在这里?我的程序中有按钮和标签。我需要为他们做些什么吗?iPhone方法问题(dealloc一个viewDidUnload)

我想要一个高效运行的应用程序。

这里是我的代码:

- (void)viewDidUnload { 
     // Release any retained subviews of the main view. 
     // e.g. self.myOutlet = nil; 
     self.doublePicker = nil; 
     self.color = nil; 
     self.choice = nil; 
     [super viewDidUnload]; 
    } 

    - (void)dealloc { 
     [doublePicker release]; 
     [color release]; 
     [choice release]; 
     [super dealloc]; 
    } 

回答

2

您应该只在viewDidUnload中释放您的IBOutlet和其他UI元素。您在视图控制器中分配的所有其他数据(以及IBOutlets)应该在dealloc方法中发布。这是因为视图可以在视图控制器的生命周期内多次加载和卸载。例如,如果视图不可见,则视图可以被卸载,但它后面的数据(在视图控制器中)仍然需要保存在内存中。当视图及其控制器不再需要时,调用dealloc方法。

0

一般的规则是,你要调用release在任何你allocinit。您在xib中创建的组件不需要被释放。

+0

我一直以为你确实必须发布任何IBOutlet,该属性被设置为保留。视图加载使用KVC来连接IBOutlets并使用属性(如果可用)。 – Rengers 2011-02-09 20:48:10

1

您发布的代码是正确的,但你也应该为你的店铺创建属性,像这样:在你的.h文件中

@property (nonatomic, retain) UIPickerView *doublePicker; 
@property (nonatomic, retain) UIPickerView *color; 
// ...etc 
在.m文件

@synthesize doublePicker; 
@synthesize color; 
// ...etc 

关于这种技术存在一些争议(明确保留你的插座并像这样释放它们),但它是Apple推荐的技术:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmNibObjects.html#//apple_ref/doc/uid/TP40004998-SW2