gpt4 book ai didi

cocoa-touch - 在 viewDidUnload 中释放 View

转载 作者:行者123 更新时间:2023-11-28 17:45:37 24 4
gpt4 key购买 nike

我知道如果我通过使用属性保留一个 IBOutlet,那么我必须在 viewDidUnload 中将它设置为 nil,但是其他人呢?

例如,我有三个 subview view1、view2 和 view3,它们从 nib 加载,这是 Controller 的头文件

@interface MyViewController : UIViewController {
IBOutlet UIView *view1;
UIView *view2;
//no reference for view3
}
@property (nonatomic, retain) IBOutlet UIView *view2; //property view2 is an IBOutlet!!
@end

和方法viewDidUnload

- (void)viewDidUnload {
self.view2 = nil;
//[view1 release];
//view1 = nil;
[super viewDidUnload];
}

我是否必须释放 view1 并将其设置为零?或者 UIViewController 会为我将它设置为 nil?view3 呢?

我还必须在 dealloc 中释放 view1 吗?

编辑:我想很多人不明白我的问题

首先,view1 是一个 IBOutlet,声明为 ivar 并分配一个 ivar 将不会保留它。我知道 UIViewController 肯定会保留它,但我必须释放它还是 UIViewController 会为我释放它?如果 UIViewController 将释放它,那么我不必再次释放它。

其次,view2 也是一个 IBOutlet,尽管它被声明为属性而不是 ivar。

@property (nonatomic, retain) IBOutlet UIView *view2;

它是一个保留属性,因此设置它会保留它,所以我知道我必须将它设置为 nil 才能释放它。我对此没有问题。

对于 view3,没有它的引用,因此我假设我不需要对它做任何事情。我还假设没有必要为 nib 中的 every 对象做一个引用。

最佳答案

默认情况下保留所有导出,即使它们没有为其声明属性。所以你需要释放它们。如果您继续将 assigned 属性声明为 outlet,那么您不需要释放,但您也不能依赖它,因为您不是所有者。

因此您需要同时释放 view1view2,因为它们被声明为 outlet。 view3 是一个不存在的变量,因此无需担心。

关于cocoa-touch - 在 viewDidUnload 中释放 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com