gpt4 book ai didi

iphone - 是否必须在 dealloc 中释放 IBOulet?

转载 作者:行者123 更新时间:2023-12-03 18:16:54 24 4
gpt4 key购买 nike

是否必须在 dealloc 中释放 IBOulet?我对此不确定,因为我没有进行分配,通常您只释放您称为分配的东西。有人知道吗?

最佳答案

您的 IBOutlet 可能是 @properties。如果是,并且您有 retain 作为属性,那么您确实需要在 -dealloc

中释放

换句话说:

@interface MyViewController : UIViewController {
IBOutlet UITableView *myTable;
}

@property (nonatomic, retain) IBOutlet UITableView *myTable;

@end

您必须在dealloc中[myTable release];

如果您在 Xcode 中创建一个新的基于导航的应用程序,并查看 appdelegate.h:

@interface Untitled1AppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;
UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@end

以及appdelegate.m的dealloc:

- (void)dealloc {
[navigationController release];
[window release];
[super dealloc];
}

这里看到的关键是这样的行:

@property (nonatomic, retain) IBOutlet UIWindow *window;

如果其中有保留,则意味着该属性由您的代码“拥有”,您必须释放它。

当然,还有其他方法,例如不将 IBOutlet 声明为属性,或者将它们声明为属性而不保留。我发现在大多数情况下我更喜欢保留它们的属性,然后我必须显式释放它们。一个例子是当您从一个 View Controller 翻转到另一个 View Controller 时。当一个 View Controller 被关闭时,它的 View 将被删除并被释放。如果我不保留该 View 上的任何 IBOutlet UILabels,它们也会被释放。这意味着当我翻转回旧 View 时,我必须仔细检查并将标签和控件重置为最后的值,而如果我只保留 IBOutlet,我可以轻松保存它们。

关于iphone - 是否必须在 dealloc 中释放 IBOulet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1529350/

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