gpt4 book ai didi

objective-c - 在 UIStoryboard 中分配初始化对象

转载 作者:行者123 更新时间:2023-12-01 17:23:33 25 4
gpt4 key购买 nike

考虑这样一种情况, Storyboard文件中有一个对象链接到 IBOutlet。 ,例如以下。

@property (nonatomic, strong) IBOutlet UIImageView *imageView;

留给它自己的设备, ViewController将愉快地加载并在正确的框架内显示正确的图像等,如 Interface Builder 中所确定的那样。
但是,如果将以下代码添加到 View Controller 的 viewDidLoad方法,获得(显然)相同的结果。
- (void)viewDidLoad {
_imageView = [[UIImageView alloc] init];
//...
}

这是否意味着 IBOutlets 的程序化分配初始化?是完全可选的吗?还是添加这条线会产生稍微不同的结果?

我之所以问,是因为我一直在实现中添加 alloc-init,然后在我最新的项目中我忘记了它,令我惊讶的是,它仍然按预期工作。

最佳答案

Storyboard或 xib 文件是其中包含的对象的序列化。加载 Storyboard时,所有对象都被实例化(使用 initWithCoder: ,因为我们正在反序列化它们)。这与 allo/init 完成相同的工作,除了设置在 xib 中定义的对象的所有属性。

xib 包含有关您的 ImageView 的足够信息以完全创建它。如果您随后分配/初始化一个新的 ImageView 并将其分配给用于导出的变量,那么您只是替换了从 Storyboard 创建的对象,这是毫无意义的,因为您的导出现在没有指向屏幕。

总之- alloc/init 每个导出都不是可选的,这是错误的。

关于objective-c - 在 UIStoryboard 中分配初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621369/

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