Set*_*ein 2 iphone memory-management objective-c ios
对于视图控制器,必须释放在Interface Builder中设置的任何出口,并在viewDidUnload中将其设置为nil ,并且还必须在dealloc中释放.
(请参阅:我何时应该在viewDidUnload中而不是在dealloc中释放对象?)
实现[ viewDidUnload ] 的最重要原因之一是UIViewController子类通常还包含对视图层次结构中各种子视图的拥有引用.例如,这些属性可以在从nib加载时通过IBOutlets设置,或者在loadView [强调添加] 内部以编程方式设置.
我的问题是,我们是否真的需要为视图层次结构中的子视图实现viewDidUnload,这些子视图是在loadView中以编程方式创建的(没有Interface Builder)?
这取决于您如何创建它们以及是否需要在其他地方引用它们.
例如:
- (void)loadView
{
[super loadView];
UIButton *someButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
someButton.frame = CGRectMake(0, 0, 50, 50);
[self.view addSubview: someButton];
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,您不需要实现viewDidUnload,因为someButton是在loadView中自动释放的.
另一个例子:
- (void)loadView
{
[super loadView];
self.someButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
someButton.frame = CGRectMake(0, 0, 50, 50);
[self.view addSubview: someButton];
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,你会想要使用viewDidUnload,因为你有另一个对someButton的引用.您希望viewDidUnload释放该按钮并重置引用,这样您就不会不正确地使用它以及释放内存.在这种情况下,您还希望在dealloc方法中释放按钮,以防从未调用viewDidUnload.
归档时间: |
|
查看次数: |
1006 次 |
最近记录: |