iPhone方法问题(解除锁定viewDidUnload)

iPhone方法问题(解除锁定viewDidUnload),iphone,objective-c,ios,iphone-sdk-3.0,ios4,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.do

我一直在开发一个应用程序,我读的那本书说要把这些语句放到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];
    }

一般规则是,您希望对
alloc
init
的任何内容调用
release
。您在xib中创建的组件不需要发布。

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

您发布的代码是正确的,但是您还应该为您的插座创建属性,如下所示:

在.h文件中:

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

@synthesize doublePicker;
@synthesize color;
// ...etc
关于这项技术(明确地保留你的插座并像这样释放它们)有一些争论,但这是苹果公司推荐的技术:


我一直认为您必须释放任何属性设置为保留的IBOutlet。视图加载使用KVC连接IBOutlets,并使用一个属性(如果可用)?嗯。。。不太确定。。。我只记得“保留”、“分配”和“复制”。。。但是你可以找到很多很好的老文章来解释它,如果你只搜索一点
init
不会增加retain计数,
allocWithZone:
会增加,还有
retain
copyWithZone:
。你应该释放你的笔尖插座。