iPhone方法问题(dealloc一个viewDidUnload)

时间:2011-02-09 20:31:09

标签: iphone objective-c ios iphone-sdk-3.0 ios4

我一直在研究一个应用程序,我读过的那本书说这些语句都放在viewDidUnload和dealloc方法中。还有什么其他信息?我的程序中有按钮和标签。我需要为他们做些什么吗?

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

这是我的代码:

- (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];
    }

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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

答案 2 :(得分:0)

一般规则是,您要对releasealloc的任何内容致电init。您在xib中创建的组件不需要发布。